Разница между "как $ключ => $значение" и "как $значение" в 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
.
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
помогает отслеживать, что они означают.
Допустим, у вас есть ассоциативный массив, подобный этому:
$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
, результат цикла будет точно таким же, как
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!'
Это отлично подходит для тех случаев, когда вам нужно знать ключ массива.
Если массив выглядит следующим образом:
- $рекомендуемые ["фрукты"] = "оранжевый";
- $рекомендуемые ["фрукты"] = "банан";
- $рекомендуемый ["овощ"] = "морковь";
Ключ $ будет содержать тип (фрукт или овощ) для каждого значения массива (апельсин, банан или морковь)
Здесь $ключ будет содержать $ключ, связанный с $значением в $признаками. Разница в том, что теперь у вас есть этот ключ.
array("thekey"=>array("name"=>"joe"))
Здесь $значение равно
array("name"=>"joe")
$ ключ - это "ключ"