У меня есть вызов базы данных, и я пытаюсь понять, что значение $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 – это «ключ»