这是一个真正的问题(也是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中是否有简写形式来获取数组的最后一个值?
答案 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%。
我很好奇是否可能会有更好的速记。