Этот ставит меня в тупик. Я пытаюсь понять, почему это не работает. У меня есть функция, которая возвращает массив. Я хочу использовать список, чтобы поместить этот массив в переменные. Кажется, это не работает. Вот что у меня есть:
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'];
Что-то я делаю не так в этом конкретном случае? Есть ли какое-то ограничение на функцию списка, которая помешала бы этому работать? (Обратите внимание, что приведенное выше, очевидно, не является реальной функцией или определено правильно и представлено только в качестве примера).
От руководство:
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);
Вы могли бы использовать экстракт функция для создания переменных, как показано ниже:
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));
Так как функция списка работает только с числовыми (или без ключей), вы должны удалить ключи из массива, прежде чем сможете вставить их в переменные, используя список.
list($x, $y, $z) = array_values(function($x, $y, $z));