PHP не может преобразовать массив, используя список, если массив возвращается функцией?

Этот ставит меня в тупик. Я пытаюсь понять, почему это не работает. У меня есть функция, которая возвращает массив. Я хочу использовать список, чтобы поместить этот массив в переменные. Кажется, это не работает. Вот что у меня есть:

function($x, $y, $z){
return array('x' => $x, 'y' => $y, 'z' => $z);
}

list($x, $y, $z) = function($x, $y, $z);

Однако это, похоже, не возвращает переменные обратно в переменные $ x, $ y, $ z.

Вместо этого я должен сделать это:

function($x, $y, $z){
return array('x' => $x, 'y' => $y, 'z' => $z);
}

$array = function($x, $y, $z);
$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

Что-то я делаю не так в этом конкретном случае? Есть ли какое-то ограничение на функцию списка, которая помешала бы этому работать? (Обратите внимание, что приведенное выше, очевидно, не является реальной функцией или определено правильно и представлено только в качестве примера).

-1

Решение

От руководство:

list () работает только с числовыми массивами и предполагает, что числовые индексы начинаются с 0.

Просто измените ключи на числовые, и это будет работать нормально:

function($x, $y, $z){
return array($x, $y, $z);
// OR: return array_values(array('x' => $x, 'y' => $y, 'z' => $z));
}

list($x, $y, $z) = function($x, $y, $z);
2

Другие решения

Вы могли бы использовать экстракт функция для создания переменных, как показано ниже:

function foo($x, $y, $z){
return array('x' => $x, 'y' => $y, 'z' => $z);
}

extract(foo($x, $y, $z));

// or you have to use the values of the array returned.
list($x, $y, $z) = array_values(foo($x, $y, $z));
1

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

list($x, $y, $z) = array_values(function($x, $y, $z));
0
По вопросам рекламы [email protected]