在php中访问不带方括号的数组值

发布于 2024-08-26 16:55:29 字数 184 浏览 5 评论 0原文

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

In php how can I access an array's values without using square brackets around the key? My particular problem is that I want to access the elements of an array returned by a function. Say function(args) returns an array. Why is
$var = function(args)[0];
yelling at me about the square brackets? Can I do something like
$var = function(args).value(0);
or am I missing something very basic?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

北渚 2024-09-02 16:55:30

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

$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();

As the others have said, you pretty much have to use a temporary variable:

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

But, if know the structure of the array being returned it is possible to avoid the temporary variable.

If you just want the first member:

$value = reset(myFunction());

If you want the last member:

$value = end(myFunction());

If you want any one in between:

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

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

// or if you want more than one:

list(, , $thirdVar, , $fifth) = myFunction();
薄荷港 2024-09-02 16:55:30

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

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

对于对象,这在 PHP 5 中已放宽。您可以这样做:(

$echo function($args)->property;

假设 function 返回一个对象课程。)

In PHP, when getting an array as a function result, you unfortunately have to do an extra step:

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

For objects, this has been relaxed in PHP 5. You can do:

$echo function($args)->property;

(provided function returns an object of course.)

飘然心甜 2024-09-02 16:55:30
function getKey($array, $key){
    return $array[$key];
}

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

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

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

$array = myFunc();
$value = $array[0];
function getKey($array, $key){
    return $array[$key];
}

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

There is no way to do this without adding a user function unfortunately. It is just not part of the syntax.

You could always just do it the old fashion way

$array = myFunc();
$value = $array[0];
爱你是孤单的心事 2024-09-02 16:55:30

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

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

台北 Kinetix Kin 的回答

What exactly matches your expecting is:

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

answered Kinetix Kin, Taipei

瞳孔里扚悲伤 2024-09-02 16:55:30

如果你想要这个,最好返回一个对象(不幸的是,它完全蹩脚的 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 放宽了对象的解引用,但不是数组的解引用。或者当然可以像其他人建议的那样编写一个包装函数。

if you want this, its probably best to be returning an object (unfortunately, its totally lame php doesnt support this). Heres a crazy way i was able to figure out though, out of novelty (please dont do this!):

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

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

So yeah..until they add support for array dereferencing in php, i think you should probably just cast the return array as an object:

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

and then you can do returnsArray()->foo, since php relaxes dereferencing for objects but not arrays.. or of course write a wrapper function like others have suggested.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文