Начиная с 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()
.
Подробную информацию и примеры можно найти в этом сообщении: https://sebastiandedeyne.com/the-list-function-and-practical-uses-of-array-destructuring-in-php/
Что касается использования explode()
с list()
или деструктуризации массива, если вам не гарантируется определенное количество элементов, рекомендуется объявить 3-й параметр explode()
, чтобы ограничить количество сгенерированных элементов. Это не заставит производить столько элементов; скорее, он просто скажет php прекратить взрыв, когда будет достигнуто это количество элементов.
[$firstVariable, $secondVariable] = explode(' ', $stringToBeHalved, 2);
Если вы не уверены на 100%, что ваши разнесенные данные предоставят сбалансированные данные другой стороне оператора присваивания, вы можете реализовать максимум с помощью описанной выше техники и использовать что-то вроде array_replace()
, чтобы обеспечить минимальное количество элементов справа. сторону оператора присваивания.
Код: (Демо)
$strings = [
"1,2,3,4",
"1,2,3",
"1,2"
];
$minElements = 3;
$defElements = array_fill(0, $minElements, null);
foreach ($strings as $string) {
[$a, $b, $c] = array_replace($defElements, explode(',', $string, $minElements));
var_export($a);
echo ' _ ';
var_export($b);
echo ' _ ';
var_export($c);
echo "\n-----------------\n";
}
Выход:
'1' _ '2' _ '3,4'
-----------------
'1' _ '2' _ '3'
-----------------
'1' _ '2' _ NULL
-----------------
И еще один метод, который очень редко рекомендуется, это вызов extract()
. Эта функция может быть опасной, если у вас нет полного контроля над данными, которые она обрабатывает, потому что она поместит все ключи данных в глобальную область видимости в виде имен переменных, что потенциально может перезаписать переменные и привести к уязвимости или поломке скрипта.
Чтобы подготовить данные для извлечения, преобразуйте индексированный массив в ассоциативный массив, назначив ключи.
Код: (Демо)
$threeKeys = ['a', 'b', 'c'];
foreach ($strings as $string) {
extract(array_combine($threeKeys, explode(',', $string, 3)));
// now you can use $a, $b, and $c
}
В приведенной выше демонстрации показаны некоторые предупреждения, генерируемые при непредоставлении сбалансированных/ожидаемых объемов данных. Таким образом, мораль этой истории заключается в том, чтобы быть осторожным и устранять возможные побочные случаи, гарантируя, что обработчики данных всегда будут получать то, что им нужно.
person
mickmackusa
schedule
27.04.2018