2008-10-05 77 views
7
function returnsAnArray() 
{ 
    return array ('test'); 
} 

echo returnsAnArray()[0]; 

在PHP中生成语法错误。直接从返回数组中获取元素而不将结果分配给临时变量的最有效方法是什么?索引返回数组的最有效方法?

+0

如果实际上没有语法,怎么会出现语法错误? – artistoex 2011-06-07 23:16:03

回答

5

这里有一种方法,使用list语言结构

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

list($foo)=returnsAnArray(); 

您可以通过此与array_slice

list($third,$fourth,$fifth)=array_slice(returnsAnArray(), 2, 3); 
+0

为什么downvote?这是访问数组的有效方法... – 2008-10-05 20:47:01

+0

这实际上是访问数组的一种非常好的方式。不过,我曾经看到有人绊倒它,也许是因为它超出了标准的C-flavor语法(即分配给函数的东西)。 – pilsetnieks 2008-10-05 21:38:02

+0

那么你如何概括它来访问数组中的'$ n`值? – moritz 2008-10-06 07:34:37

1

如果只有一个阵列中的成员这将工作:

<?php 
echo current(returnsAnArray()); 
?> 
+0

不,它不会。 current()需要引用,因此值无法传递。尽管如此,从returnsAnArray()返回也是可行的。 – 2008-10-05 20:46:17

0

你可以对未知长度的索引数组做到这一点。

foreach (returnsAnArray() as $item) 
    echo $item; 
-1

结合从偏移抢元素序列我问自己,为什么一个想避免为返回的数组创建一个临时变量。为什么你不只是返回一个值而不是整个数组?也许你将不得不推翻你的程序逻辑。

或者它是一个性能/内存问题?考虑使用references而不是始终创建一个新的数组对象并返回它。

3

定义一个用于从数组中返回特定索引的新函数。

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

您可能想在其中添加一些错误和类型检查。

,然后用它是这样的:

echo arr_index(returnsAnArray(), 0); 

编码快乐:)

1

对于常规的数字索引数组, func()返回这样一个数组,$ n是你想要的索引:

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

对于关联数组(例如字符串或其他东西作为键)或数字数组,它们没有被编号并且从0..n完成,这有点复杂。其中$关键的关键是你想要的:

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

这也将在第一种情况下工作。