2

给定一个返回数组的函数;

function return_me_an_array() {
  return array('my_value');
}

如何调用它并以优雅的方式从数组中获取单个值(无论是第一个、最后一个还是唯一)(是的,我知道这是 PHP!)

如果我这样做

$var = reset(return_me_an_array());

我收到以下 PHP 严格错误:

严格警告:只能通过引用传递变量

同样,这些中的每一个都给出了相同的警告。

$var = array_shift(return_me_an_array());
$var = array_pop(return_me_an_array());

我知道我可以这样做:

$temp = return_me_an_array();
$var = $reset($temp);

但是必须对两个语句进行处理是非常可怕的。

有没有好的方法来做到这一点?

从表面上看,这类似于如何在 PHP 中返回一个数组并在一行中获取它的第一个元素?但接受的答案使用reset- 所以我认为这是不同的;我要么正在寻找一个不给出严格警告的解决方案,要么被告知我想要什么是不可能的。

我也知道 PHP 5.4 引入了数组取消引用(例如return_me_an_array()[0]),但是我目前使用的是 5.3。

关闭后编辑:这怎么太本地化了?这是关于如何编写优雅的 PHP 的一般问题。还是很少有人关心优雅的 PHP,这是“一种非常狭窄的情况,并不普遍适用于互联网的全球受众”?

4

4 回答 4

5

用这个:

$var = current(return_me_an_array());

演示:http: //3v4l.org/Ruj5e

手册: http: //php.net/manual/en/function.current.php

于 2012-10-26T09:34:26.137 回答
1

为此目的定义您自己的数组方法:

function my_reset($array)
{
    return reset($array);
}

echo my_reset(return_me_an_array());

升级版:

还有更优雅的方法,查看Returning References手册

于 2012-10-26T09:40:25.947 回答
0

用这个:

$var = array_shift($var = return_me_an_array());

链接到键盘

于 2012-10-26T09:39:06.403 回答
0

好的,他不能只是抑制错误吗?还是不够优雅?

$var = @reset(return_me_an_array());

或在https://stackoverflow.com/a/6726277/881551上分享

$var = reset( ( return_me_an_array() ) );

为了规避严格的通知,这两者都经过测试并且工作正常,这实际上是被要求的。

于 2012-10-26T15:59:58.910 回答