Я не уверен, что это возможно, но я не могу понять, как это сделать, если это …
Я хочу получить определенный элемент из массива, который возвращается функцией, без предварительной передачи его в массив … вот так …
$item = getSomeArray()[1]; function getSomeArray(){ $ret = Array(); $ret[0] = 0; $ret[1] = 100; return $ret; }
Какой правильный синтаксис для этого?
PHP еще не может этого сделать, это известное ограничение. Вы имеете полное право задаваться вопросом: «Вы издеваетесь надо мной?». Сожалею.
Если вы не возражаете E_STRICT
предупреждение E_STRICT
вы всегда можете вытащить первый и последний элементы массива со reset
и end
соответственно – это означает, что вы также можете вытащить любой элемент, поскольку array_slice
может организовать тот, который вы хотите остаются первыми или последними, но это, возможно, слишком далеко.
Но отчаяния нет: (в это время предстоящий) версия PHP 5.4 будет включать именно эту функцию (при разыменовании массива имен).
Обновление: я просто подумал о другой технике, которая будет работать. Вероятно, есть веская причина, что я никогда не использовал это или не видел, что он используется, но технически он выполняет эту работу.
// To pull out Nth item of array: list($item) = array_slice(getSomeArray(), N - 1, 1);
Синтаксис, о котором вы говорите, называется разыменованием функциональных массивов. Это еще не реализовано, и для него есть 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
Да, 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); }
Ладно, возможно, не работает с цифровыми клавишами, но я не уверен.
PHP 5.4 добавил Arere Dereferencing , вот пример из документации 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
Я знаю, что это старый вопрос, но в вашем примере вы также можете использовать array_pop()
чтобы получить последний элемент массива (или array_shift()
чтобы получить первый).
<?php $item = array_pop(getSomeArray()); function getSomeArray(){ $ret = Array(); $ret[0] = 0; $ret[1] = 100; return $ret; }
Как говорят другие, нет прямого способа сделать это, я обычно просто назначаю его такой переменной:
$items = getSomeArray(); $item = $items[1]; function getSomeArray(){ $ret = Array(); $ret[0] = 0; $ret[1] = 100; return $ret; }
Я вполне уверен, что это невозможно сделать в PHP. Вы должны назначить возвращенный массив другому массиву, прежде чем сможете получить доступ к элементам внутри или использовать его непосредственно в какой-либо другой функции, которая будет выполнять итерацию по возвращенному массиву (т.е. var_dump (getSomeArray ())).