如果我想获取仅限数组的值和未知密钥,最好的方法是什么?
一种方法:
if(count($list) == 1)
{
$value = implode('', $list);
....
内爆,您可以使用array_values($list)[0]
或者
if(count($list) == 1)
{
foreach($list as $value)
{
....
你还有什么方法可以获得价值,而且还有最好的方法。方式是什么?
答案 0 :(得分:2)
在你所描述的情况下,没有“最佳”方式。考虑这个解决方案:
if(count($list) == 1)
{
$value = reset($list);
}
来自php.net:
reset()将数组的内部指针倒回第一个元素和 返回第一个数组元素的值。
返回第一个数组元素的值,如果是数组,则返回FALSE 空。
另一种解决方案可以使用end函数:
if(count($list) == 1)
{
$value = end($list);
}
end()将数组的内部指针前进到最后一个元素,并返回其值。
答案 1 :(得分:1)
这是我能想到的:
使用reset
:
echo reset($list);
使用key
:
echo $list[key($list)];
使用end
:
echo end($list);
使用current
:
echo current($list);
echo array_shift(array_slice($list,0,1));
使用array_values
:
echo array_values($list)[0];
echo array_shift(array_values($list));
上面的一些函数依赖于数组的内部指针,如果不移动它,它总是位于数组的第一个条目。
然而,当涉及到确定哪个选项是最佳时,我无法说出来。我几乎不相信有一个最佳选项。
答案 2 :(得分:1)
每个上下文都没有真正的最佳选项,但以下是对替代方案的一些注意事项:
$value = implode('', $list);
这会将值转换为字符串。如果数组为空或具有多个值,则不会出现错误,而是获取空字符串或所有值连接
$value = reset($list);
这具有设置内部数组指针的副作用。如果数组为空,则结果为false
。在具有多个元素的数组中,您将获得第一个项
end($list)
- 相同,但如果数组有多个项目,您将获得最后一项。$value = current($list);
这没有副作用但是假设内部数组指针之前没有被提前到数组的末尾(即用next()
或循环)。否则(或使用空数组),结果为false
。
$list[key($list)]
- 相同,但如果数组为空或末尾有指针,则导致错误而不是false
。$value = array_values($list)[0];
无副作用,始终返回第一个值。如果数组为空,则会引发错误。在古老的PHP版本(早于5.4)中不起作用,因为数组解除引用。