Доступ к массиву, возвращаемому функцией

Есть ли в любом случае прямой доступ к данным, возвращаемым в массиве без временной переменной?

В настоящее время мой код выглядит следующим образом:

function getData($id) { // mysql query return mysql_fetch_array($result); } $data = getData($id); echo $data['name']; 

Есть ли прямой способ получить возвращаемые данные без временной переменной?

PHP 5.4 добавлен массив разыменования, вот пример из документации массива PHP:

Пример # 7 Разделение разворота

 function getArray() { return array(1, 2, 3); } // on PHP 5.4 $secondElement = getArray()[1]; // previously $tmp = getArray(); $secondElement = $tmp[1]; 

с массивами ответ отрицательный, но вы можете использовать объекты:

 function getData($id) { // mysql query return mysql_fetch_object($result); } echo getData($id)->name; 

На самом деле, нет. Вы могли бы определить функцию, чтобы сделать это, хотя:

 function array_value($array, $key) { return $array[$key]; } // and then echo array_value(getData($id), 'name'); 

Единственный другой способ, который, вероятно, не поможет вам в этом случае, – это использовать list() который даст вам первые n элементов в возвращаемом массиве. Вы должны заранее знать порядок позиций в списке:

 function test() { return array(1, 2, 3, 4); } list($one, $two, $three) = test(); // now $one is 1, $two is 2, $three is 3 

Некоторое время назад я задал аналогичный вопрос .

Короткий ответ – нет, вы не можете. Тем не менее, если вам просто нужно первое значение в массиве, вы можете использовать reset ():

 function getArray() { array('la', 'li', 'lu'); } echo reset(getArray()); // echos "la" 

К сожалению нет.

Вы могли бы сделать что-то вроде этого:

 function getData($id) { // mysql query return mysql_fetch_array($result); } foreach(getData("your_input_query") as $key=>$value){ echo $value; } 

И тогда вы можете использовать оператор switch или if / else для выполнения других функций возвращаемых данных, если они равны определенному значению (в этом случае, если $ key == 'name').

Короче говоря, гораздо проще просто установить эту временную переменную и получить доступ к ней таким образом.

Я думаю, что этот вопрос немного неверен для вашего вопроса, но я думаю, что вы хотите сделать что-то вроде этого:

 echo getData($id)->someArrayOffset; 

Хотя вы можете сделать это с помощью mysql_fetch_object, я покажу вам, как вы можете это сделать, используя ArrayObject в PHP5 или возвращая свой собственный объект на PHP 4, чтобы вы могли найти полезность для него вне функции, возвращающей объекты для вас. Вот ваша функция, использующая ArrayObject в PHP5:

 function getData($id) { // mysql query return new ArrayObject( mysql_fetch_array($result) ); } echo getData($id)->name;