Как читается массив в цикле foreach PHP?

В системах Linux вы можете попытаться найти общие файлы на /proc.

Например, existente of / proc / vz / сообщает вам, что OpenVZ.

Вот полное руководство по обнаружению среды VM под Linux без необходимости «пить таблетки»:)

24
задан BoltClock 26 March 2011 в 02:35
поделиться

6 ответов

foreach () реализован с использованием итераторов - таким образом, он вызывает только функцию, которая возвращает массив один раз, а затем использует итератор, который указывает на существующий результат установите, чтобы продолжить работу с каждым элементом.

38
ответ дан 28 November 2019 в 22:44
поделиться

Я думаю, тестирование обязательно даст ответ на этот вопрос.

Вот мой код:

function GetArray() {
    echo "I am called.\n";
    return array("One"=>1, "Two"=>2, "Three"=>3, "Four"=>4, "Five"=>5);
}

echo "Case #1\n";
$array = GetArray();
foreach ($array as $key => $val){
    // Do stuff while traversing array
    echo "    Inside the loop: $key => $val\n";
}
echo "\n";

echo "Case #2\n";
foreach (GetArray() as $key => $val) {
    // Do stuff while traversing array
    echo "    Inside the loop: $key => $val\n";
}
echo "\n";

и вот результат:

Case #1
I am called.
    Inside the loop: One => 1
    Inside the loop: Two => 2
    Inside the loop: Three => 3
    Inside the loop: Four => 4
    Inside the loop: Five => 5

Case #2
I am called.
    Inside the loop: One => 1
    Inside the loop: Two => 2
    Inside the loop: Three => 3
    Inside the loop: Four => 4
    Inside the loop: Five => 5

Они оба читают функцию вызова один раз. Так что ничем не отличается.

9
ответ дан 28 November 2019 в 22:44
поделиться

foreach создает копию входного массива и работает с ней на каждой итерации. Таким образом, вы можете использовать foreach (do_something_that_returns_an_array () as $ key => $ val) , и он вызовет do_something_that_returns_an_array () только один раз.

8
ответ дан 28 November 2019 в 22:44
поделиться

Я всегда предполагал, что do_something_that_returns_an_array () запускается только один раз, потому что, в отличие от цикла for, нет причин для его выполнения несколько раз. Причина, по которой проверка истинности цикла for запускается в конце каждой итерации, состоит в том, чтобы учесть очень сложные средства проверки.

В качестве теста я сделал следующее:

function get_array() {echo 5; return array(1,2,3,4,5);}
foreach(get_array() as $key => $value) {}

Скрипт напечатал 5 раз. Следовательно, функция get_array () оценивается только один раз.

2
ответ дан 28 November 2019 в 22:44
поделиться

Я бы привел пример, чтобы увидеть, что происходит. Что-то вроде ...

function do_something_that_returns_an_array() {
    echo 'I have been called!'; 
    return array('i am an', 'array');
}

Как вы можете видеть на CodePad, он вызывается только один раз .

4
ответ дан 28 November 2019 в 22:44
поделиться

foreach () работает с объектами Iterator или IteratorAggregate (например, массивами и объектами, реализующими интерфейс). Он не может работать с неизменяемыми объектами. Функции возвращают неизменяемые объекты, поэтому возвращаемый массив должен быть скопирован в объект Iterator перед форсингом (он создается самим php)

0
ответ дан 28 November 2019 в 22:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: