Я не могу понять оператор foreach. Возможно, я покину этот мир в неведении. Конечно, я читал учебники для новичков и читал образцы, но если чуть больше одного аргумента, то для меня это черный ящик ... Итак, сегодня у меня есть следующий источник данных:
Array ( [error] => [warning] => [status] => 0 [fields] => Array ( [0] => content ) [attrs] => Array ( [path] => 7 ) [matches] => Array ( [1] => Array ( [weight] => 1319 [attrs] => Array ( [path] => /home/test1.txt ) ) [2] => Array ( [weight] => 1319 [attrs] => Array ( [path] => /home/test2.txt ) ) [3] => Array ( [weight] => 1319 [attrs] => Array ( [path] => /home/test3.txt ) ) ) [total] => 3 [total_found] => 3 [time] => 0.000 [words] => Array ( [test1] => Array ( [docs] => 3 [hits] => 3 ) ) )
Я нашел для него подходящий образец!
foreach ( $result["matches"] as $ID => $info ) {
echo $ID." "; print_r($info); echo "<br>";
}
1 Array ( [weight] => 1319 [attrs] => Array ( [path] => /home/test1.txt ) )
2 Array ( [weight] => 1319 [attrs] => Array ( [path] => /home/test2.txt ) )
3 Array ( [weight] => 1319 [attrs] => Array ( [path] => /home/test3.txt ) )
}
Я не могу понять, как это работает!
Почему, когда я меняю ID на IDD или инфо, программа все равно работает? Как эти переменные связаны с данными?
Как мне изменить свой foreach для получения:
/home/test1.txt
/home/test2.txt
/home/test3.txt
as $ID похож на $ID=, поэтому вы можете использовать любое имя переменной, которое хотите, потому что значение будет присвоено новой переменной $ID.
@Jeff ответил на первый вопрос. Во втором случае вы можете использовать echo($info['attrs']['path]); вместо print_r($info);.
Спасибо всем! Теперь я вижу, как ЛЮБЫЕ переменные получают значение! Теперь ясно. Код тоже работает!






Левая часть «as» - это «вход» для foreach: обычно это объект / класс множество или повторяемый.
Правая часть ($ID => $info) - это «вывод» в форме $key => $value. Как вы назовете две переменные с правой стороны, полностью зависит от вас, если вы используете то же имя внутри цикла позже.
В обычном предложении синтаксис foreach будет примерно таким:
//For each (item of that) group give me it's key and a copy of the item
foreach( $array as $key => $value) {
}
Документы опишите это так:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
The first form loops over the array given by array_expression. On each iteration, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next iteration, you'll be looking at the next element).
The second form will additionally assign the current element's key to the $key variable on each iteration.
левая часть «as» - это «вход» для foreach: обычно это массив или итерируемый объект / класс. Правая часть - это «вывод» в форме
$key => $value. Итак, как вы назовете две переменные с правой стороны, полностью зависит от вас, если вы позже будете использовать то же имя внутри цикла.