7

在 php 中,如何在不使用键周围的方括号的情况下访问数组的值?我的特殊问题是我想访问函数返回的数组元素。说 function(args) 返回一个数组。为什么 $var = function(args)[0]; 关于方括号对我大喊大叫?我可以做类似 $var = function(args).value(0); 的事情吗?还是我错过了一些非常基本的东西?

4

5 回答 5

10

正如其他人所说,您几乎必须使用临时变量:

$temp = myFunction();
$value = $temp[0];

但是,如果知道要返回的数组的结构,就可以避免临时变量。

如果您只想要第一个成员:

$value = reset(myFunction());

如果你想要最后一个成员:

$value = end(myFunction());

如果你想要介于两者之间的任何一个:

// second member
list(, $value) = myFunction();

// third
list(, , $value) = myFunction();

// or if you want more than one:

list(, , $thirdVar, , $fifth) = myFunction();
于 2010-03-23T01:28:23.830 回答
2

在 PHP 中,当获取一个数组作为函数结果时,不幸的是,您必须做一个额外的步骤:

$temp_array = function($args);
$var = $temp_array[0];

对于对象,这在 PHP 5 中已经放宽了。你可以这样做:

$echo function($args)->property;

(当然前提function是返回一个对象。)

于 2010-03-23T01:21:05.263 回答
1

如果你想要这个,最好返回一个对象(不幸的是,它完全蹩脚的 php 不支持这个)。出于新奇,这是我能够弄清楚的一种疯狂方式(请不要这样做!):

function returnsArray(){
    return array("foo" => "bar");
}

echo json_decode(json_encode((object)returnsArray()))->foo;
//prints 'bar'

所以是的..直到他们在php中添加对数组取消引用的支持,我认为您可能应该将返回数组转换为对象:

return (object)array("foo" => "bar");

然后你可以做returnsArray()-> foo,因为php放松了对象而不是数组的解引用..或者当然像其他人建议的那样编写一个包装函数。

于 2010-11-17T20:09:39.757 回答
1
function getKey($array, $key){
    return $array[$key];
}

$var = getKey(myFunc(args), $key);

不幸的是,如果不添加用户功能,就无法做到这一点。它只是不是语法的一部分。

你总是可以用老式的方式来做

$array = myFunc();
$value = $array[0];
于 2010-03-23T01:21:19.313 回答
1

与您的期望完全相符的是:

echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey'));

回答 Kinetix Kin,台北

于 2010-10-25T14:41:10.150 回答