Разница между "как $ключ => $значение" и "как $значение" в PHP для каждого


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

Author: rink.attendant.6, 2013-08-28

7 answers

Ну, $key => $value в цикле foreach относится к парам ключ-значение в ассоциативных массивах, где ключ служит индексом для определения значения вместо числа, такого как 0,1,2,... В 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 помогает отслеживать, что они означают.

 61
Author: djiango, 2013-08-28 16:08:47

Допустим, у вас есть ассоциативный массив, подобный этому:

$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.

 15
Author: Charaf JRA, 2014-08-04 14:08:14

Очень важное место, где он находится ТРЕБУЕТСЯ следует упомянуть об использовании пары 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, которая не устанавливается после каждой итерации цикла.

 8
Author: Ahmad Baktash Hayeri, 2015-06-11 06:45:58

Разница в том, что на

foreach($featured as $key => $value){
 echo $value['name'];
}

Вы можете манипулировать значением $key каждой итерации из их пары ключ-значение. Как ответил @djiango, если вы не манипулируете каждым значением $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) с такой же легкостью. Поэтому рассмотрите приведенный выше формат как удобный способ манипулировать клавишами при необходимости.

Приветствия

 6
Author: sargas, 2014-02-03 22:00:30

Допустим, у вас есть такой массив:

$array = (0=>'123',1=>'abc','test'=>'hi there!')

В вашем цикле foreach каждый цикл будет выглядеть следующим образом:

$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'

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

 3
Author: aynber, 2013-08-28 16:04:06

Если массив выглядит следующим образом:

  • $рекомендуемые ["фрукты"] = "оранжевый";
  • $рекомендуемые ["фрукты"] = "банан";
  • $рекомендуемый ["овощ"] = "морковь";

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

 2
Author: 3seconds, 2013-08-28 16:05:01

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

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

Здесь $значение равно

array("name"=>"joe")

$ ключ - это "ключ"

 1
Author: Thomas Martin Klein, 2013-08-28 16:03:27