PHP获取数组的第一个值(无论是关联数组还是普通数组)

5

这可能听起来像个愚蠢的问题。如果不预先知道数组是否是关联数组,如何获取数组的第一个值?

为了获取数组的第一个元素,我想要这样做:

function Get1stArrayValue($arr) { return current($arr); }

这样做是否可行?如果在函数调用之前移动数组内部指针,会不会出现问题?有没有更好/更聪明/更快的方法?

谢谢!


1
我想知道你如何定义关联数组中的“第一个”元素 ;) - phunehehe
3个回答

9
更好的做法可能是使用reset,它可以“将数组的内部指针倒回到第一个元素并返回第一个数组元素的值”。
示例:
function Get1stArrayValue($arr) { return reset($arr); }

如下面评论 @therefromhere 所指出的,这个方法并不理想,因为它改变了内部指针的状态。然而,我认为这并不是什么问题,因为其他函数,如array_pop,也会重置它。
不能在遍历数组时使用的主要问题并不是问题,因为foreach操作的是数组的副本。 PHP手册说明:

除非引用了数组,否则foreach操作的是指定数组的副本而不是数组本身。

可以使用一些简单的测试代码来证明这一点:

$arr = array("a", "b", "c", "d");
foreach ( $arr as $val ){
    echo reset($arr) . " - " . $val . "\n";
}

结果:

a - a
a - b
a - c
a - d

5
值得注意的是,由于它会将内部指针倒回,所以如果您正在遍历该数组,则不应这样做。 - John Carter
Great Yacoby,因此内部指针不受foreach循环的影响。 - Marco Demaio

1

要获取任何数组的第一个元素,您需要先重置指针。 http://ca3.php.net/reset

function Get1stArrayValue($arr) { 
  return reset($arr); 
}

0

如果您不介意从数组中丢失第一个元素,您也可以使用

array_shift() - 将数组的第一个值移出并返回它,缩短数组一个元素并将所有内容向下移动。所有数字数组键都将被修改为从零开始计数,而文字键则不会被修改。

或者您可以将数组包装到ArrayIterator中并使用seek

$array = array("foo" => "apple", "banana", "cherry", "damson", "elderberry");
$iterator = new ArrayIterator($array);
$iterator->seek(0);
echo $iterator->current(); // apple

如果这也不是一个选项,那么请使用其他建议之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接