从函数返回时访问数组元素
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【讨论】:
以上是关于从函数返回时访问数组元素的主要内容,如果未能解决你的问题,请参考以下文章
从函数返回的访问数组 - javascript/jquery noob moment
无法从函数返回的变量索引到空数组,或访问返回的正则表达式数据时出现问题