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

PHP Назначение массива переменным

Я не уверен, что моя память ошибочна, но когда я последний раз использовал PHP (много лет назад), я смутно помню, что делал что-то вроде этого:

$firstVariable, $secondVariable = explode(' ', 'Foo Bar');

Обратите внимание, что выше приведен неверный синтаксис, однако в этом примере он присваивает 'Foo' $firstVariable, а 'Bar' - $secondVariable.

Каков правильный синтаксис для этого?

Спасибо.

4b9b3361

Ответ 1

list($firstVar, $secondVar) = explode(' ', 'Foo Bar');

list() - это то, что вам нужно.

Ответ 2

Сначала несколько примеров со списком(), а затем два примера со списком() в сочетании с explode().


Примеры справочной страницы PHP для списка() особенно освещают:

В принципе, ваш список может быть до тех пор, пока вы хотите, но это абсолютный список. Другими словами, порядок элементов в массиве, очевидно, имеет значение, и чтобы пропустить что-то, вы должны оставить соответствующие пятна пустыми в своем списке().

Наконец, вы не можете перечислить строку.

<?php

$info = array('coffee', 'brown', 'caffeine');

// Listing all the variables
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";

// Listing some of them
list($drink, , $power) = $info;
echo "$drink has $power.\n";

// Or let skip to only the third one
list( , , $power) = $info;
echo "I need $power!\n";

// list() doesn't work with strings
list($bar) = "abcde";
var_dump($bar); // NULL

?>

Несколько примеров, например:

Применение list(), explode() и Arrays к дисфункциональным отношениям:

<?php
// What they say.
list($firstVar, $secondVar, , , $thirdVar) = explode(' ', 'I love to hate you');
// What you hear.
// Disaplays: I love you
echo "$firstVar $secondVar $thirdVar";
?>

Наконец, вы можете использовать list() в сочетании с массивами. $VARIABLE[] хранит элемент в последнем слоте в массиве. Следует хранить данные о порядке вещей, так как это, вероятно, наоборот, что вы ожидаете:

<?php
list(, $Var[], ,$Var[] , $Var[]) = explode(' ', 'I love to hate you');
// Displays: 
// Array ( [0] => you [1] => hate [2] => love )
print_r($Var);
?>

Объяснение того, почему вещи порядка хранятся в том виде, в каком оно указано, указано в предупреждении на странице справочника():

list() assigns the values starting with the right-most parameter. If you are 
using plain variables, you don't have to worry about this. But if you are 
using arrays with indices you usually expect the order of the indices in 
the array the same you wrote in the list() from left to right; which it isn't.
It assigned in the reverse order.

Ответ 3

Начиная с php7.1, вы можете выполнять деструктуризацию симметричного массива.

https://www.php.net/manual/en/migration71.new-features.php#migration71.new-features.symmetric-array-destructuring

Код: (Демо)

$array = [1,2,3];
[$a, $b, $c] = $array;
echo "$a $b $c";
// displays: 1 2 3

Без list() вызовов list().

Подробное описание и примеры можно найти в этом посте: https://sebastiandedeyne.com/the-list-function-and-practical-uses-of-array-destructuring-in-php/


Что касается использования explode() с list() или деструктуризацией массива, если вам не гарантировано определенное количество элементов, рекомендуется объявить третий параметр explode() чтобы обеспечить баланс между сторонами оператора присваивания.

[$firstVariable, $secondVariable] = explode(' ', $stringToBeHalved, 2);