Разница между «как $ 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 .

Ну, значение $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!' 

Это отлично подходит для тех времен, когда вам нужно знать ключ массива.

если массив выглядит так:

  • $ featured ["fruit"] = "orange";
  • $ featured ["fruit"] = "banana";
  • $ featured ["vegetable"] = "морковь";

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

здесь $ key будет содержать ключ $, связанный с $ значением в $ featured . Разница в том, что теперь у вас есть этот ключ.

 array("thekey"=>array("name"=>"joe")) 

здесь $ value

 array("name"=>"joe") 

$ key – это «ключ»