在单元素php数组中获取值的最好方法


Best way to fetch only value in single-element php array

如果我想获取数组的值,和一个未知的键,最好的方法是什么?

一种方法:

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_shiftarray_slice:

echo array_shift(array_slice($list,0,1));
使用array_values:
echo array_values($list)[0];

使用array_shiftarray_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()将数组的内部指针移动到最后一个元素,并返回其值。

并不是每个上下文中都有最佳的选项,但是这里有一些关于替代选项的考虑:

  1. $value = implode('', $list);
    

    将值转换为字符串。如果数组为空或有多个值,则不会出现错误,相反,您将得到一个空字符串或所有值连接在一起

  2. $value = reset($list);
    

    这有设置内部数组指针的副作用。如果数组为空,则结果为false。在包含多个元素的数组中,您将获得第一项

    • 变化:end($list) -相同,但如果数组有多个项目,您将获得最后一个项目。
  3. $value = current($list);
    

    这样做没有副作用,但前提是内部数组指针之前没有被移动到数组的末尾(即使用next()或循环)。否则(或使用空数组),结果为false

    • 变化:$list[key($list)] -相同,但导致错误而不是false,如果数组为空或指针在末尾。
  4. $value = array_values($list)[0];
    

    没有副作用,总是返回第一个值。如果数组为空则抛出错误。

  5. 不能在旧的PHP版本(5.4以前)中工作,因为数组解引用。