在 PHP 5.3 中,如何在没有严格警告的情况下在一行中获取单个元素数组中的值

Posted

技术标签:

【中文标题】在 PHP 5.3 中,如何在没有严格警告的情况下在一行中获取单个元素数组中的值【英文标题】:How do I get the value in a single element array in one line without strict warnings in PHP 5.3 【发布时间】:2012-10-16 13:27:02 【问题描述】:

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

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

但是在两个语句上做这件事是相当可怕的。

有什么好办法吗?

从表面上看,这类似于How to return an array and get the first element of it in one line in PHP?,但接受的答案使用reset - 所以我认为这是不同的;我要么正在寻找一种不给出严格警告的解决方案,要么被告知我想要什么是不可能的。

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

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

【问题讨论】:

我猜你可以为它写一个自定义函数... 我认为你对这个不走运。它是 php .. 我相信 PHP 中的那些函数被称为“构造”,如果我没记错的话,它们不接受变量函数......由于它的参考用法 @Sammaye 不,只是他们通过引用来获取他们的论点。它与语言结构无关。 @deceze 啊,好吧,我记得在某处读过它是一个构造,但那是另一个函数。 【参考方案1】:

使用这个:

$var = current(return_me_an_array());

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

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

【讨论】:

这如何解决问题?编辑:使用 current() 也不能解决它,它需要通过引用传递 据我所知 current() 只返回数组指针指向的项目。它不会更改数组,因此它可以接受函数返回的直接数组。 确认它确实可以正常工作,但文档有误:current ( array &$array ) 因为它应该作为参考传递,这意味着它不应该正常工作,但确实如此。 这似乎对我有用,3v4l.org/Ruj5e 证实了这一点。有什么理由不这样做吗?【参考方案2】:

使用这个:

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

Link to codepad

【讨论】:

我不确定这是否有效,我也懒得去发现。您可以在 codepad.org 上发布证明吗? 没有,只是测试了一下。 @deceze :哈哈哈,懒人。我已经在我的本地主机上检查了这个,但我仍然会给你一个键盘链接 你是在 php 5.3 上做的吗?我使用codepad.viper-7.com,但它不适用于 php 5.3-dev 是的,我没有在 php 5.3 或更高版本上这样做,它给出了错误。让我检查另一个解决方案【参考方案3】:

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

function my_reset($array)

    return reset($array);


echo my_reset(return_me_an_array());

UPD:

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

【讨论】:

【参考方案4】:

好吧,他不能直接抑制错误吗?还是不够优雅?

$var = @reset(return_me_an_array());

或喜欢分享到https://***.com/a/6726277/881551

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

为了规避本质上要求的严格通知,两者都经过测试并且工作正常。

【讨论】:

以上是关于在 PHP 5.3 中,如何在没有严格警告的情况下在一行中获取单个元素数组中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用请求的情况下删除 Laravel 5.3 中的会话?

如何在没有警告的情况下调用 QML Menu::addMenu?

如何在没有任何错误或警告的情况下找到构建失败的原因

如何在没有警告的情况下使用 execv()?

将 PHP 从 5.2 版本升级到 5.3

PHP 不显示错误或警告