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

时间:2010-09-04 13:42:31

标签: php arrays function indexing return

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

echo getArray()[0];

然而,我遇到了一个巧妙的小技巧:

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

它确实有效。问题是,我不知道为什么它的工作原理。如果有人能够解释,那就太好了。

感谢。

3 个答案:

答案 0 :(得分:10)

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

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

${false}=getArray()

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

!${false}=getArray()

否定上述值,将其转换为布尔值假

 ${!${false}=getArray()}

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

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

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

同一想法的更多变体

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

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

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

答案 1 :(得分:3)

它的工作原理是因为您使用大括号将值转换为变量,这是一个例子。

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

为什么需要这个,需要包含你想要将字符串或返回值转换为变量,例如

${$_GET['var']} = true;

这是不好的做法,永远不应该用于IMO。

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

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

   return $object;
}
echo test()->name;

答案 2 :(得分:2)

应该注意的是,可以执行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。

<强>手册