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

Пример использования пула PHP foreach

Один из примеров цикла foreach в PHP -

foreach ($row as $key => $value) { 
    // somecode
}

Мне трудно понять, что делает =>. Может ли кто-нибудь запустить меня через то, как это "видно" или оценивается PHP? Каков порядок работы, какое значение присваивается $key?

Чем он отличается от:

foreach ($row as $value) { 
    // somecode
}

?

Я логически считал, что значение $value будет присвоено $key, тогда оно будет назначаться как строка $row, но это явно неверно...

4b9b3361

Ответ 1

Я понимаю, что это немного сложно, у меня были проблемы с пониманием, когда я впервые начал использовать его. Чем больше вы его используете, тем больше имеет смысл.

Ваш массив будет выглядеть так:

//  "key"   "value"
//    |        |
//    V        V
$row['1'] = 'item1';
$row['2'] = 'item2';
$row['3'] = 'item3';
$row['4'] = 'item4';

Ключи могут быть любыми, им не нужно быть цифрами. Таким образом, вы можете выполнять итерацию по всем элементам массива без необходимости знать ключ!

Итак, ваш первый пример можно объяснить следующим образом:

//         +--- The ARRAY where all of your data is
//         |
//         |       +----- The KEY to access that element of the array
//         |       |
//         |       |        +----- The VALUE of that element
//         |       |        |
//         V       V        V
foreach ($row as $key => $value){
   if($row[$key] == $value){ // this statement is always true
      echo "true AGAIN!";  // and thus will always print this line
   }
}

Насколько я понимаю, => на самом деле не является операндом, он просто используется для завершения структуры цикла foreach.

Ответ 2

Массивы PHP хранятся в виде пар ключей и значений:

$arr = array(
    'key1' => 'value1',
    'key2' => 'value2'
);

Стандартный синтаксис foreach получает только значения:

foreach ($arr as $value) {
    // value1, value2
}

Альтернативный синтаксис позволяет также получить ключи:

foreach ($arr as $key => $value) {
    // $key is "key1", then "key2"
    // $value is "value1" then "value2"
}

См. руководство для foreach.

Ответ 3

Два примера одинаковы, но первый добавляет определение ключа, который вы сейчас просматриваете, и называет его ключ $.

Сравните с определением array(), например array('key' => 'value')

Если вы используете первый метод, у вас есть ключ $key, содержащий "ключ", а во втором примере вы этого не делаете.

Ответ 4

foreach ($row as $key => $value) { ..somecode..}

Вышеупомянутое используется в ассоциативном массиве, например:

array("a" => 1, "b" => 2, "c" => 3);

В приведенном выше случае переменной $key присваивается первое значение [a на первой итерации, b на втором, c в конечном цикле] (называемое ключом), а переменной $value присваивается второе значение [1 на первой итерации, 2, на втором, 3 на финале] (называется значением.)

Если назначение ключей было опущено, тогда значение $все равно будет присвоено второе значение.

Ответ 5

Обозначает для foreach ключ и значение:

BCDF9C 0005: FE_RESET             (CV 0 ($array), u) -> VAR 2
BCE014 0005: FE_FETCH             (VAR 2, u) -> VAR 3
BCE08C 0005: OP_DATA              (u VAR 0 &(0+2208F38), u VAR 0 &(0+2208F38)) -> TMP_VAR 5 &(C8+2208F39)
BCE104 0005: ASSIGN               (CV 2 ($value), VAR 3) -> VAR 4
BCE17C 0005: ASSIGN               (CV 1 ($key), TMP_VAR 5) -> VAR 6
BCE1F4 0005: JMP                  (u &(BCDFA0+4))
BCE26C 0005: SWITCH_FREE          (VAR 2)

Обозначает для foreach только значение:

BCE2E4 0007: FE_RESET             (CV 0 ($array), u) -> VAR 7
BCE35C 0007: FE_FETCH             (VAR 7, u) -> VAR 8
BCE3D4 0007: OP_DATA              (u VAR 0 &(0+2208F38), u VAR 0 &(0+2208F38)) -> u VAR 0 &(0+2208F38)
BCE44C 0007: ASSIGN               (CV 2 ($value), VAR 8) -> VAR 9
BCE4C4 0007: JMP                  (u &(BCE2E8+B))
BCE53C 0007: SWITCH_FREE          (VAR 7)

Извините за странное представление кода операции.

В принципе, версия без ключа присваивает двум меньшим переменным за итерацию. Он не назначает ключ и временную переменную, но просто назначает var напрямую.

Ответ 6

Из Документация по PHP:

Для массивов, присваивающих значение именованный ключ выполняется с помощью команды "= > " оператор. Приоритет этого оператор такой же, как и другой операторов присваивания.

Этот вопрос также вызвал у меня любопытство относительно имени оператора => в PHP.

Как вы видите, документация явно не дает ему имя. Это привело меня к поиску каналов PHP на IRC. Общий консенсус в том, что он называется оператором ракеты.