如何从关联的PHP数组中获取第一项?< 7.3 菲律宾比索性能7.3 菲律宾比索

php
2022-08-30 06:26:46

如果我有一个这样的数组:

$array['foo'] = 400;
$array['bar'] = 'xyz';

我想在不知道数组的键的情况下从该数组中获取第一项,我该怎么做?这有功能吗?


答案 1

reset() 会给你数组的第一个值,如果你在数组中有一个元素:

$value = reset($array);

它还会在数组为空的情况下为您提供。FALSE


答案 2

< 7.3 菲律宾比索

如果你对数组不够了解(你不确定第一个键是 foo 还是 bar),那么数组也可能是的。

因此,最好进行检查,特别是如果返回值可能是布尔值 FALSE:

$value = empty($arr) ? $default : reset($arr);

上面的代码使用,因此有副作用(它重置数组的内部指针),所以你可能更喜欢使用快速访问数组第一个元素的副本:resetarray_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);

性能

如果数组不是很大,您实际上并不需要,而是可以获取整个keys数组的副本,然后获取第一项:array_slice

$key = count($arr) ? array_keys($arr)[0] : null;

但是,如果您有一个非常大的数组,则调用将需要比(两个函数遍历数组,但后者在收集所需数量的项目后立即终止 - 这是一个)。array_keysarray_slice

一个值得注意的例外是,当您有第一个指向非常大且复杂的对象的键时。在这种情况下,将复制第一个大对象,而只会抓取键。array_slicearray_keys

7.3 菲律宾比索

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

推荐