Подтвердить что ты не робот

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

4b9b3361

Ответ 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 - это "клавиша"