这可能听起来像个愚蠢的问题。如果数组是否关联,如何在不预先知道数组的第一个值的情况下获取数组的第一个值?
为了得到数组的第一个元素,我想这样做:
function Get1stArrayValue($arr) { return current($arr); }
没关系? 如果在函数调用之前移动了数组内部指针,它会产生问题吗? 有没有更好/更聪明/更胖的方法呢?
谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
要获取任何数组的第一个元素,您需要先重置指针。 http://ca3.php.net/reset
function Get1stArrayValue($arr) {
return reset($arr);
}
答案 2 :(得分:0)
如果你不介意丢失数组中的第一个元素,你也可以使用
array_shift()
- 关闭数组的第一个值并返回它,将数组缩短一个元素并将所有内容向下移动。所有数值数组键都将被修改为从零开始计数,而不会触及文字键。
或者您可以将数组包装到ArrayIterator中并使用seek
:
$array = array("foo" => "apple", "banana", "cherry", "damson", "elderberry");
$iterator = new ArrayIterator($array);
$iterator->seek(0);
echo $iterator->current(); // apple
如果这也不是一个选项,请使用其他建议之一。