如果我想获取数组的值,和一个未知的键,最好的方法是什么?
一种方法:
if(count($list) == 1)
{
$value = implode('', $list);
....
可以用array_values($list)[0]
代替内爆或者
if(count($list) == 1)
{
foreach($list as $value)
{
....
还有什么方法可以得到这个值,有没有"最好"的方法?
我能想到的是:
使用reset
:
echo reset($list);
Using key
:
echo $list[key($list)];
使用end
:
echo end($list);
Using current
:
echo current($list);
使用array_shift
和array_slice
:
echo array_shift(array_slice($list,0,1));
使用array_values
:
echo array_values($list)[0];
使用array_shift
和array_values
:
echo array_shift(array_values($list));
上面的一些函数依赖于数组的内部指针,如果不移动,该指针始终位于数组的第一个入口。
然而,当要确定哪个选项是最好的时,我真的说不出来。我几乎不相信有一个最好的选择
在你描述的情况下,没有"最好"的方法。考虑这个解决方案:
if(count($list) == 1)
{
$value = reset($list);
}
From php.net:
reset()将数组的内部指针回滚到第一个元素和返回第一个数组元素的值。
返回第一个数组元素的值,如果数组是,则返回FALSE空的。
另一个解决方案可以使用end函数:
if(count($list) == 1)
{
$value = end($list);
}
end()将数组的内部指针移动到最后一个元素,并返回其值。
并不是每个上下文中都有最佳的选项,但是这里有一些关于替代选项的考虑:
-
$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以前)中工作,因为数组解引用。