从函数返回时访问数组元素

Posted

技术标签:

【中文标题】从函数返回时访问数组元素【英文标题】:Accessing an array element when returning from a function 【发布时间】:2011-04-08 05:40:39 【问题描述】:

通过 Google 进行的一些搜索(以及我自己的经验)表明,在 php 中,当从同一行的函数调用返回时,您无法获取数组元素。例如,你不能这样做:

echo getArray()[0];

但是,我遇到了一个巧妙的小技巧:

echo $!$false=getArray()[0];

它确实有效。问题是,我不知道 为什么 它有效。如果有人能解释一下,那就太好了。

谢谢。

【问题讨论】:

它确实不会使您的代码更具可读性;) 【参考方案1】:
echo $!$false=getArray()[0];

这就是它的工作原理,一步一步

$false=getArray()

将 getArray 的结果分配给具有空名称的变量('' 或 null 将起作用,而不是 false)

!$false=getArray()

否定上面的值,把它变成布尔假

 $!$false=getArray()

将先前的(假)值转换为(空)字符串,并将此字符串用作变量名。也就是说,这是步骤 1 中的变量,等于 getArray 的结果。

$!$false=getArray()[0];

获取那个“空”变量的索引并返回一个数组元素。

同一想法的更多变体

echo $1|$1=getArray()[1];
echo $''.$Array=getArray()[1];

function p(&$a, $b)  $a = $b; return '_'; 
echo $p($_, getArray())[1];

至于getArray()[0]为什么不起作用,这是因为php团队不知道如何让它起作用。

【讨论】:

【参考方案2】:

之所以有效,是因为您使用大括号将值转换为变量,这是一个示例。

$hello = 'test';
echo $"hello";

为什么需要这个,需要这个包你想把一个字符串或者返回值变成一个变量,例子

$$_GET['var'] = true;

这是一种不好的做法,永远不应该在 IMO 中使用。

如果你想直接运行函数,你应该使用对象,例如

function test()

   $object = new stdClass();
   $object->name = 'Robert';

   return $object;

echo test()->name;

【讨论】:

【参考方案3】:

应该注意,您可以从 PHP 5.4 开始执行此操作。来自数组取消引用的手册:

从 PHP 5.4 开始,可以直接对函数或方法调用的结果进行数组取消引用。以前只能使用临时变量。

例子:

function theArray() 
    return range(1, 10);


echo theArray()[0];
// PHP 5.4+: 1
// PHP -5.4: null

PHP 5.4 之前:尝试访问尚未定义的数组键与访问任何其他未定义变量相同:将发出 E_NOTICE 级别的错误消息,结果将为 NULL。

手动:

http://www.php.net/manual/en/language.types.array.php#example-89

【讨论】:

以上是关于从函数返回时访问数组元素的主要内容,如果未能解决你的问题,请参考以下文章

访问Fortran中返回数组的元素

JavaScript回调 - 访问返回数组的各个元素的问题

从函数返回的访问数组 - javascript/jquery noob moment

无法从函数返回的变量索引到空数组,或访问返回的正则表达式数据时出现问题

从 JNI 返回 MPI::Request[] 类型并访问 Java 中的 Request 元素

访问从异步调用返回的数组项的问题