Answers:
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
如果您对数组不够了解(不确定第一个键是foo还是bar),那么数组也可能是empty。
因此,最好进行检查,尤其是如果返回的值可能是布尔值FALSE时,尤其如此:
$value = empty($arr) ? $default : reset($arr);
上面的代码使用reset
,因此具有副作用(它会重置数组的内部指针),因此您可能更喜欢使用array_slice
来快速访问数组的第一个元素的副本:
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
假设要分别获取键和值,则需要向第四个参数添加array_slice
:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
配对获得第一项(key => value
):
$item = array_slice($arr, 0, 1, true);
简单修改即可分别获取最后一项,键和值:
foreach(array_slice($arr, -1, 1, true) as $key => $value);
如果数组不是真的很大,您实际上并不需要array_slice
,而是可以获取整个keys数组的副本,然后获取第一项:
$key = count($arr) ? array_keys($arr)[0] : null;
但是,如果您有一个非常大的数组,则对to的调用array_keys
将需要更多的时间和内存array_slice
(两个函数都遍历该数组,但是后者在收集到所需数量的项后立即终止-这是一个)。
一个显着的例外是,当您拥有第一个关键点时,该关键点指向了一个非常大且复杂的对象。在这种情况下,array_slice
将复制第一个大对象,而array_keys
仅获取键。
PHP 7.3 array_key_first()
以及都实现了array_key_last()
。明确提供这些参数是为了有效地访问第一个和最后一个键,而不会由于副作用而重置阵列的内部状态。
因此,在PHP 7.3的第一个值的$array
可访问
$array[array_key_first($array)];
您仍然最好检查一下数组是否为空,否则会出现错误:
$firstKey = array_key_first($array);
if (null === $firstKey) {
$value = "Array is empty"; // An error should be handled here
} else {
$value = $array[$firstKey];
}
假循环在第一次迭代时中断:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
或使用each()
(警告: 自PHP 7.2.0起不推荐使用):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
reset()
函数将仅检索第一个值。
有一些选择。array_shift()
将返回第一个元素,但也会从数组中删除第一个元素。
$first = array_shift($array);
current()
将返回其内部内存指针指向的数组的值,默认情况下是第一个元素。
$first = current($array);
如果要确保它指向第一个元素,则可以始终使用reset()
。
reset($array);
$first = current($array);
reset()
实际上返回了元素,因此在后面加上a $first = current($array)
是多余的。
只是为了让我们有其他选择:reset($arr);
如果您不尝试将数组指针保持在适当的位置就足够了,并且对于非常大的数组,它只需很少的开销。也就是说,它存在一些问题:
$arr = array(1,2);
current($arr); // 1
next($arr); // 2
current($arr); // 2
reset($arr); // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.
在不更改指针的情况下执行此操作的方法:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
这样做的好处$arr[reset(array_keys($arr))];
是,如果数组实际为空,则会发出警告。
另一种简便的方法是使用array_values
array_values($array)[0]
reset()
是更好的选择,因为如果数组为空,则返回false。例如,您的解决方案在以下问题中
array_values($array)[0] ?? FALSE
我们可以做的
$first = reset($array);
代替
reset($array);
$first = current($array);
如 reset()
重置后返回数组的第一个元素;
使用reset()函数可以从该数组中取出第一项,而无需像这样知道它的键。
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
输出// 400
我这样做是为了获得第一个和最后一个值。这也适用于更多值。
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz