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

时间:2015-08-27 12:29:44

标签: php arrays

如果我想获取仅限数组的值和未知密钥,最好的方法是什么?

一种方法:

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

内爆,您可以使用array_values($list)[0] 或者

if(count($list) == 1)
{
   foreach($list as $value)
   {
      ....

你还有什么方法可以获得价值,而且还有最好的方法。方式是什么?

3 个答案:

答案 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);

使用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));

上面的一些函数依赖于数组的内部指针,如果不移动它,它总是位于数组的第一个条目。

然而,当涉及到确定哪个选项是最佳时,我无法说出来。我几乎不相信有一个最佳选项。

答案 2 :(得分:1)

每个上下文都没有真正的最佳选项,但以下是对替代方案的一些注意事项:

  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];
    

    无副作用,始终返回第一个值。如果数组为空,则会引发错误。在古老的PHP版本(早于5.4)中不起作用,因为数组解除引用。