PHP 7是否具有等效的array_value_last()?

时间:2019-10-25 09:51:30

标签: php arrays

这是一个真正的问题(也是PHP开发人员的代码高尔夫)。

我知道array_key_last()在PHP中存在。

我想在array_value_last()上使用explode('/', __FILE__),但是... array_value_last()不存在。

我正在一个受限的环境中工作(在返回数据之前,包含文件并运行一个函数的包含文件),并且我都尝试了这两种方法:

  • array_pop(explode('/', __FILE__))
  • end(explode('/', __FILE__))

,但这些都不起作用。 (我不知道为什么他们不起作用)。

  

N.B。该环境的唯一目的是返回变量(数组或字符串)。在这种环境下,array_pop(explode('/', __FILE__))end(explode('/', __FILE__))都导致浏览器错误:Content Encoding Error An error occurred during a connection to example.com. Please contact the website owners to inform them of this problem.

     

echo之类的语句和其他执行语句产生相同的编码错误

这是我当前的代码, 可以正常工作:

$My_Filename = explode('/', __FILE__)[(count(explode('/', __FILE__)) - 1)];

PHP 7中是否有简写形式来获取数组的最后一个值?

3 个答案:

答案 0 :(得分:2)

您可以使用end

$latestValue = end($array); // Returns latest value in $array, setting the internal pointer to the last element 
reset($array); // Don't forget to reset the pointer!!!

好吧...如果它不起作用(那是非常奇怪的家伙,xD的大问题),您可以尝试执行以下操作:

$aux = array_values($array); //No need to use this if it isn't an associative array
$size = count($aux);
$latestValue = $array[$size-1]; //Be careful with empty arrays

答案 1 :(得分:1)

您可以使用basename(__FILE__);来获取路径的最后一部分。通常,不要为这种单行代码而努力-就性能而言,您将不会有任何收获,但代码可读性却不高。

带有表达式的array_pop()end()函数都会给您一个提示,因为它们还将尝试在当前范围内修改变量(通过引用传递),并且您收到的消息来自服务器或错误处理程序(生产环境中的隐藏详细信息)-默认的解释器显示(对开发人员而言更好)将为您提供:<b>Notice</b>: Only variables should be passed by reference in...

答案 2 :(得分:0)

以下是高尔夫代码的候选对象:

原文: explode('/', __FILE__)[(count(explode('/', __FILE__)) - 1)] // 59个字符

替代: array_reverse(explode('/', __FILE__))[0] // 40个字符

这意味着减少了近 33%

我很好奇是否可能会有更好的速记。

相关问题