Самый эффективный способ индексировать возвращаемый массив? - PullRequest
7 голосов
/ 06 октября 2008
function returnsAnArray ()
{
  return array ('test');
}

echo returnsAnArray ()[0];

генерирует синтаксическую ошибку в PHP. Каков наиболее эффективный способ прямого получения элемента из возвращенного массива без назначения результата временной переменной?

Ответы [ 7 ]

5 голосов
/ 06 октября 2008

Вот один способ, используя список языковой конструкции

function returnsAnArray ()
{
  return array ('test');
}

list($foo)=returnsAnArray();

Вы можете получить последовательность элементов из смещения, комбинируя это с array_slice

list($third,$fourth,$fifth)=array_slice(returnsAnArray(), 2, 3);
3 голосов
/ 06 октября 2008

Определить новую функцию для возврата определенного индекса из массива.

function arr_index($arr, $i) { return $arr[$i]; }

Возможно, вы захотите добавить туда ошибку и проверку типов.

А затем используйте это так:

echo arr_index(returnsAnArray(), 0);

Happy Coding:)

1 голос
/ 04 ноября 2009

Для обычных числовых индексированных массивов, где func () возвращает такой массив, а $ n - необходимый индекс:

array_pop(array_slice(func(),$n,1));

Для ассоциативных массивов (например, строк или других вещей в качестве ключей) или числовых массивов, которые не нумеруются и не заканчиваются от 0 до n, это немного более запутанно. Где $ key - это ключ, который вы хотите:

array_pop(array_intersect_keys(func(),Array($key => ""));

Это также будет работать для первого случая.

1 голос
/ 06 октября 2008

Другой вариант:

<?php
echo reset(functionThatReturnsAnArray());
?>

Аналогичная тема: PHP: Могу ли я сослаться на один элемент массива, который возвращается функцией?

1 голос
/ 06 октября 2008

Это будет работать, если в массиве только один элемент:

 <?php
 echo current(returnsAnArray());
 ?>
0 голосов
/ 06 октября 2008

Я спрашиваю себя, почему не следует создавать временную переменную для возвращаемого массива. Почему бы вам просто не вернуть одно значение вместо целого массива? Возможно, вам придется переосмыслить логику вашей программы.

Или это проблема производительности / памяти? Попробуйте использовать ссылки вместо того, чтобы всегда создавать новый объект массива и возвращать его.

0 голосов
/ 06 октября 2008

Вы можете сделать это для индексированного массива неизвестной длины.

foreach ( returnsAnArray() as $item )
  echo $item;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...