如果我有一个像这样的数组:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Run Code Online (Sandbox Code Playgroud)
而且我想在不知道密钥的情况下从该阵列中获取第一个项目,我该怎么做?这有功能吗?
sou*_*rge 266
reset() 如果数组中有元素,则为您提供数组的第一个值:
$value = reset($array);
Run Code Online (Sandbox Code Playgroud)
它还为您FALSE提供了数组为空的情况.
Joh*_*ica 44
在第一次迭代中断的假循环:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
Run Code Online (Sandbox Code Playgroud)
或者使用each()(警告: 自PHP 7.2.0起不推荐使用):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
Run Code Online (Sandbox Code Playgroud)
LSe*_*rni 35
如果你对数组知之甚少(你不确定第一个键是foo还是bar),那么数组也可能是空的.
所以最好检查一下,特别是如果返回值有可能是布尔值FALSE:
$value = empty($arr) ? $default : reset($arr);
Run Code Online (Sandbox Code Playgroud)
上述代码使用reset等具有的副作用(它重置所述阵列的内部指针),因此可能更喜欢使用array_slice可以快速访问该阵列的第一个元素的副本:
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
Run Code Online (Sandbox Code Playgroud)
假设您想分别获取键和值,则需要将第四个参数添加到array_slice:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
Run Code Online (Sandbox Code Playgroud)
要将第一个项目作为一对(key => value):
$item = array_slice($arr, 0, 1, true);
Run Code Online (Sandbox Code Playgroud)
简单修改以分别获取最后一项,键和值:
foreach(array_slice($arr, -1, 1, true) as $key => $value);
Run Code Online (Sandbox Code Playgroud)
如果数组不是很大,你实际上并不需要array_slice,而是可以获得整个键数组的副本,然后得到第一项:
$key = count($arr) ? array_keys($arr)[0] : null;
Run Code Online (Sandbox Code Playgroud)
但是,如果你有一个非常大的数组,那么调用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)];
Run Code Online (Sandbox Code Playgroud)
Jer*_*ten 25
有几个选择.array_shift()将返回第一个元素,但它也将从数组中删除第一个元素.
$first = array_shift($array);
Run Code Online (Sandbox Code Playgroud)
current() 将返回其内部内存指针指向的数组的值,这是默认情况下的第一个元素.
$first = current($array);
Run Code Online (Sandbox Code Playgroud)
如果您想确保它指向第一个元素,您可以随时使用reset().
reset($array);
$first = current($array);
Run Code Online (Sandbox Code Playgroud)
这样我们就有了一些其他的选择: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.
Run Code Online (Sandbox Code Playgroud)
在不更改指针的情况下执行此操作的方法:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
Run Code Online (Sandbox Code Playgroud)
好处$arr[reset(array_keys($arr))];是,如果数组实际为空,它会发出警告.
在获取第一个元素之前测试 a 变量是否是数组。动态创建数组时,如果将其设置为 null,则会出现错误。
例如:
if(is_array($array))
{
reset($array);
$first = key($array);
}
Run Code Online (Sandbox Code Playgroud)
另一种简单易用的方法是使用array_values
array_values($array)[0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178867 次 |
| 最近记录: |