如果我有一个这样的数组:
$array['foo'] = 400; $array['bar'] = 'xyz';
我想在不知道键值的情况下从数组中取出第一项,该怎么做呢?有这个函数吗?
在第一次迭代时中断的假循环:
$key = $value = NULL; foreach ($array as $key => $value) { break; } echo "$key = $value\n";
或者使用each() (警告: 自PHP 7.2.0起已弃用):
each()
reset($array); list($key, $value) = each($array); echo "$key = $value\n";
reset()给出数组的第一个值,如果数组中有一个元素:
reset()
$value = reset($array);
如果数组为空,它也会给你FALSE。
FALSE
有几个选择。array_shift()将返回第一个元素,但它也将从数组中删除第一个元素。
array_shift()
$first = array_shift($array);
current()将返回其内部内存指针所指向的数组的值,默认情况下是第一个元素。
current()
$first = current($array);
如果你想确保它指向第一个元素,你总是可以使用reset()。
reset($array); $first = current($array);
你可以使用array_shift
我们可以 $first = reset($array); < / p >
$first = reset($array);
而不是
作为reset()
返回重置后数组的第一个元素;
在获取第一个元素之前,测试变量a是否是一个数组。在动态创建数组时,如果它被设置为null,则会得到一个错误。
例如:
if(is_array($array)) { reset($array); $first = key($array); }
这样我们就有了一些其他的选择:reset($arr);如果你不想让数组指针保持在适当的位置,这就足够了,而且对于非常大的数组,它会引起最小的开销。也就是说,它有一些问题:
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))];的好处是,如果数组实际上是空的,它会发出警告。
$arr[reset(array_keys($arr))];
我这样做是为了得到第一个和最后一个值。这也适用于更多的价值观。
$a = array( 'foo' => 400, 'bar' => 'xyz', ); $first = current($a); //400 $last = end($a); //xyz
另一种简单的方法是使用array_values
array_values($array)[0]
你可以试试这个。
获取数组的第一个值:-
<?php $large_array = array('foo' => 'bar', 'hello' => 'world'); var_dump(current($large_array)); ?>
获取数组的第一个键
<?php $large_array = array('foo' => 'bar', 'hello' => 'world'); $large_array_keys = array_keys($large_array); var_dump(array_shift($large_array_keys)); ?>
你可以做:
$values = array_values($array); echo $values[0];
如果你对数组的了解不够(你不确定第一个键是喷火还是酒吧),那么数组也可能是空。
所以最好检查一下,特别是如果返回值可能是布尔值FALSE:
$value = empty($arr) ? $default : reset($arr);
上面的代码使用了reset和有副作用(它重置数组的内部指针),所以你可能更喜欢使用array_slice来快速访问数组的第一个元素的副本:
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):
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;
如果你有一个非常大的数组,调用array_keys将需要比array_slice更多的时间和内存(两个函数都遍历数组,但后者在收集到所需数量的项(即1)后立即终止)。
array_keys
一个明显的例外是当你有第一个键指向一个非常大和复杂的对象。在这种情况下,array_slice将复制第一个大对象,而array_keys将只抓取键。
PHP 7.3以后实现了array_key_first()和array_key_last()。这些显式提供用于有效地访问第一个和最后一个键,而不会作为副作用重置数组的内部状态。
array_key_first()
array_key_last()
因此从PHP 7.3开始,$array的第一个价值可以被访问
$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]; }
使用reset()函数从数组中获取第一项,而不需要知道它的键,如下所示。
$value = array('foo' => 400, 'bar' => 'xyz'); echo reset($value);
从PHP 7.3.0开始,可以不重置内部指针。你可以使用array_key_first。如果你确定你的数组有值,那么你可以这样做:
array_key_first
$first = $array[array_key_first($array)];
更有可能的是,你想要处理数组为空的情况:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
一句话:
$array['foo'] = 400; $array['bar'] = 'xyz'; echo 'First value= ' . $array[array_keys($array)[0]];
扩展:
$keys = array_keys($array); $key = $keys[0]; $value = $array[$key]; echo 'First value = ' . $value;
你可以使用array_values
$firstValue = array_values($array)[0];