Получение элемента из массива PHP, возвращаемого функцией
Я не уверен, что это возможно, но я не могу понять, как это сделать, если это...
Я хочу получить конкретный элемент из массива, который возвращается функцией, не передавая сначала его в массив... вроде этого...
$item = getSomeArray()[1];
function getSomeArray(){
$ret = Array();
$ret[0] = 0;
$ret[1] = 100;
return $ret;
}
Какой правильный синтаксис для этого?
Ответы
Ответ 1
PHP пока не может этого сделать, это известное ограничение. Вы имеете полное право задаваться вопросом: "Вы издеваетесь надо мной?". К сожалению.
Если вы не возражаете, генерируя предупреждение E_STRICT
, вы всегда можете вытащить первый и последний элементы массива с помощью reset
и end
соответственно - это означает, что вы также можете вытащить любой элемент с array_slice
может организовать тот, который вы хотите оставаться первым или последним, но это, возможно, слишком далеко.
Но отчаяние нет: (в это время предстоящий) версия PHP 5.4 будет включать именно эту функцию (под названием разыменование массива).
Обновление: Я просто подумал о другой технике, которая будет работать. Вероятно, есть веская причина, по которой я никогда не использовал это или не видел, что он используется, но технически он выполняет эту работу.
// To pull out Nth item of array:
list($item) = array_slice(getSomeArray(), N - 1, 1);
Ответ 2
Да, php не может этого сделать. Bat вы можете использовать ArrayObect, например:
$item = getSomeArray()->{1};
// Credits for curly braces for Bracketworks
function getSomeArray(){
$ret = Array();
$ret[0] = 0;
$ret[1] = 100;
return new ArrayObject($ret, ArrayObject::ARRAY_AS_PROPS);
}
Хорошо, возможно, не работает с цифровыми клавишами, но я не уверен.
Ответ 3
Синтаксис, о котором вы говорите, называется разыменованием функциональных массивов. Он еще не реализован и там RFC для него.
Общепринятый синтаксис - назначить возвращаемое значение функции массиву и получить доступ к значению с помощью синтаксиса $array[1]
.
Тем не менее, вы также можете передать ключ, который вам нужен, в качестве аргумента для вашей функции.
function getSomeArray( $key = null ) {
$array = array(
0 => "cheddar",
1 => "wensleydale"
);
return is_null($key) ? $array : isset( $array[$key] ) ? $array[$key] : false;
}
echo getSomeArray(0); // only key 0
echo getSomeArray(); // entire array
Ответ 4
В PHP 5.4 добавлено Разделение массива,
вот пример из документации PHP Array:
Пример # 7 Разрушение разворота
function getArray() {
return ['a', 'b', 'c'];
}
// PHP 5.4
$secondElement = getArray()[0]; // output = a
// Previously
$tmp = getArray();
$secondElement = $tmp[0]; // output = a
Ответ 5
Я знаю, что это старый вопрос, но в вашем примере вы также можете использовать array_pop()
для получения последнего элемента массива (или array_shift()
для получения первого).
<?php
$item = array_pop(getSomeArray());
function getSomeArray(){
$ret = Array();
$ret[0] = 0;
$ret[1] = 100;
return $ret;
}
Ответ 6
Как говорят другие, нет прямого способа сделать это, я обычно просто назначаю его такой переменной:
$items = getSomeArray();
$item = $items[1];
function getSomeArray(){
$ret = Array();
$ret[0] = 0;
$ret[1] = 100;
return $ret;
}
Ответ 7
Я уверен, что это невозможно сделать в PHP. Вы должны назначить возвращенный массив другому массиву, прежде чем сможете получить доступ к элементам внутри или использовать их непосредственно в какой-либо другой функции, которая будет выполнять итерацию по возвращенному массиву (то есть var_dump (getSomeArray())).