У меня есть вызов базы данных, и я пытаюсь понять, что значение $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
.
Ну, значение $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
помогает отслеживать, что они означают.
Допустим, у вас есть ассоциативный массив:
$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
.
Следует упомянуть очень важное место, где ТРЕБУЕТСЯ использовать пару key => value
в цикле foreach
. Предположим, вы захотите добавить новый / подэлемент в существующий элемент ( в другом ключе ) в массив $features
. Вы должны сделать следующее:
foreach($features as $key => $feature) { $features[$key]['new_key'] = 'new value'; }
Вместо этого:
foreach($features as $feature) { $feature['new_key'] = 'new value'; }
Большая разница здесь в том, что в первом случае вы получаете доступ к субъекту массива через главный массив с ключом к элементу, на который в данный момент указывается указатель на массив.
В то время как во втором ( который не работает для этой цели ) вы присваиваете вспомогательное значение в массиве временной переменной $feature
которая не устанавливается после каждой итерации цикла.
Разница в том, что на
foreach($featured as $key => $value){ echo $value['name']; }
вы можете манипулировать значением каждого итерационного $key
от их пары ключ-значение. Как @djiango ответил, если вы не манипулируете $key
каждого значения $key
, результат цикла будет точно таким же, как
foreach($featured as $value) { echo $value['name'] }
Источник: вы можете прочитать его из документации PHP :
Первая форма петли над массивом, заданным выражением array_expression. На каждой итерации значение> текущего элемента присваивается значению $, а указатель внутреннего массива продвигается на> один (так на следующей итерации вы будете смотреть на следующий элемент). *
Вторая форма дополнительно назначит ключ текущего элемента переменной $ key на каждой итерации.
Если данные, которыми вы управляете, являются, скажем, массивами с настраиваемыми клавишами, вы можете печатать их на экране следующим образом:
$array = ("name" => "Paul", "age" => 23);
foreach($featured as $key => $value){ echo $key . "->" . $value; }
Должен печатать:
name->Paul
age->23
И вы не сможете сделать это с помощью foreach($featured as $value)
с той же легкостью. Поэтому рассмотрите формат выше удобного способа манипулирования ключами при необходимости.
ура
Скажем, у вас есть такой массив:
$array = (0=>'123',1=>'abc','test'=>'hi there!')
В вашем цикле foreach каждый цикл будет:
$key = 0, $value = '123' $key = 1, $value = 'abc' $key = 'test', $value = 'hi there!'
Это отлично подходит для тех времен, когда вам нужно знать ключ массива.
если массив выглядит так:
ключ $ будет содержать тип (фрукты или овощи) для каждого значения массива (оранжевый, банановый или морковный)
здесь $ key будет содержать ключ $, связанный с $ значением в $ featured . Разница в том, что теперь у вас есть этот ключ.
array("thekey"=>array("name"=>"joe"))
здесь $ value
array("name"=>"joe")
$ key – это «ключ»