Разница между "как $key => $value" и "as $value" в PHP foreach
У меня есть вызов базы данных, и я пытаюсь выяснить, что делает $key => $value
в цикле foreach
.
Я спрашиваю, потому что оба эти кода выводят одно и то же, поэтому я пытаюсь понять, почему это написано именно так. Здесь код:
foreach($featured as $key => $value){
echo $value['name'];
}
это выводит то же самое, что:
foreach($featured as $value) {
echo $value['name']
}
Итак, мой вопрос в том, в чем разница между $key => $value
или просто $value
в цикле foreach
. Массив многомерный, если это имеет значение, я просто хочу знать, почему передать $key
в $value
в цикле foreach
.
Ответы
Ответ 1
Ну, $key => $value
в цикле foreach ссылается на пары ключ-значение в ассоциативных массивах, где ключ служит индексом для определения значения вместо числа, такого как 0,1,2,... In PHP, ассоциативные массивы выглядят следующим образом:
$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);
В PHP-коде: $featured
- это ассоциативный массив, зацикливаемый, а as $key => $value
означает, что каждый раз, когда цикл запускается и выбирает пару ключа-значения из массива, он сохраняет ключ в локальном $key
для использования внутри блока цикла и значения в локальной переменной $value
. Поэтому для нашего массива примеров выше цикл foreach достигнет первой пары ключ-значение, и если вы указали as $key => $value
, он сохранит 'key1'
в переменной $key
и 'value1'
в переменной $value
.
Так как вы не используете переменную $key
внутри вашего цикла, добавив ее или удалив, она не изменит вывод цикла, но лучше всего включить пару ключ-значение, чтобы показать, что это ассоциативный массив.
Также обратите внимание, что обозначение as $key => $value
произвольно. Вы можете заменить это на as $foo => $bar
, и он будет работать нормально, пока вы изменили ссылки на переменные внутри блока цикла на новые переменные $foo
и $bar
. Но сделать их $key
и $value
помогает отслеживать, что они означают.
Ответ 2
Скажем, у вас есть ассоциативный массив вроде этого:
$a = array(
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => array('x'=>123)
);
В первой итерации: $key="one"
и $value=1
.
Иногда вам нужен этот ключ, если вы хотите только значение, вы можете избежать его использования.
В последней итерации: $key='seventeen'
и $value = array('x'=>123)
, поэтому для получения значения первого элемента в этом значении array
вам понадобится key
, x в этом случае: $value['x'] =123
.
Ответ 3
Следует упомянуть очень важное место, где нужно ТРЕБУЕТСЯ использовать пару key => value
в цикле foreach
. Предположим, вы захотите добавить элемент new/sub в существующий элемент (в другом ключе) в массиве $features
. Вы должны сделать следующее:
foreach($features as $key => $feature) {
$features[$key]['new_key'] = 'new value';
}
Вместо этого:
foreach($features as $feature) {
$feature['new_key'] = 'new value';
}
Разница большая заключается в том, что в первом случае вы получаете доступ к сущностному значению массива через главный массив с ключом к элементу, который в настоящее время на который указывает указатель на массив.
В то время как во втором (который не работает для этой цели) вы присваиваете субактерию в массиве временной переменной $feature
, которая не устанавливается после каждой итерации цикла.
Ответ 4
Разница в том, что на
foreach($featured as $key => $value){
echo $value['name'];
}
вы можете манипулировать значением каждой итерации $key
из их пары ключ-значение. Как @djiango ответил, если вы не манипулируете каждым значением $key
, результат цикла будет точно таким же, как
foreach($featured as $value) {
echo $value['name']
}
Источник:
Вы можете прочитать его из Документация по PHP:
Первая форма проходит по массиву, заданному выражением array_expression. На каждой итерации значение > текущего элемента присваивается значению $, а указатель внутреннего массива продвигается нa > один (так что на следующей итерации вы будете смотреть на следующий элемент). *
Вторая форма дополнительно назначит текущему ключу элемента переменной $key в каждой итерации.
Если данные, которыми вы управляете, это, скажем, массивы с настраиваемыми клавишами, вы можете распечатать их на экране так:
$array = ("name" => "Paul", "age" => 23);
foreach($featured as $key => $value){
echo $key . "->" . $value;
}
Должен печатать:
name->Paul
age->23
И вы не сможете сделать это с помощью foreach($featured as $value)
с той же легкостью. Поэтому рассмотрите формат выше удобного способа манипулирования ключами при необходимости.
Приветствия
Ответ 5
Скажем, у вас есть такой массив:
$array = (0=>'123',1=>'abc','test'=>'hi there!')
В вашем цикле foreach каждый цикл будет:
$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'
Это отлично подходит для тех случаев, когда вам нужно знать ключ массива.
Ответ 6
если массив выглядит следующим образом:
- $featured [ "fruit" ] = "orange";
- $featured [ "fruit" ] = "banana";
- $featured [ "vegetable" ] = "морковь";
ключ $будет удерживать тип (фрукты или овощи) для каждого значения массива (оранжевый, банановый или морковный)
Ответ 7
здесь $key будет содержать $key, связанный с $value в $featured. Разница в том, что теперь у вас есть этот ключ.
array("thekey"=>array("name"=>"joe"))
здесь $value есть
array("name"=>"joe")
$key - это "клавиша"