如何从关联PHP数组中获取第一项?

时间:2009-10-24 06:21:05

标签: php

如果我有一个像:

这样的数组
$array['foo'] = 400;
$array['bar'] = 'xyz';

我想在不知道密钥的情况下从该阵列中获取第一个项目,我该怎么做?这有功能吗?

16 个答案:

答案 0 :(得分:250)

如果数组中有元素,

reset()会为您提供数组的第一个值:

$value = reset($array);

如果数组为空,它还会为您提供FALSE

答案 1 :(得分:41)

在第一次迭代时断开的假循环:

$key = $value = NULL;
foreach ($array as $key => $value) {
    break;
}

echo "$key = $value\n";

或使用each()警告: deprecated as of PHP 7.2.0):

reset($array);
list($key, $value) = each($array);

echo "$key = $value\n";

答案 2 :(得分:24)

PHP< 7.3

如果您对阵列的了解不够(您不确定第一个键是 foo 还是 bar ),那么阵列可能会也好吧,也许是

所以最好检查一下,特别是如果返回值有可能是布尔值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,而是可以获得整个密钥数组的副本,然后得到第一项:

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

如果你有一个非常大的数组,那么对array_keys的调用将需要大量的时间和内存,而不是array_slice(两个函数都会遍历数组,但是后者会尽快终止收集了所需数量的物品 - 这是一个。

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

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

答案 3 :(得分:23)

有几个选择。 array_shift()将返回第一个元素,但它也会从数组中删除第一个元素。

$first = array_shift($array);

current()将返回其内部内存指针所指向的数组的值,这是默认情况下的第一个元素。

$first = current($array);

如果你想确保它指向第一个元素,你可以随时使用reset()

reset($array);
$first = current($array);

答案 4 :(得分:9)

这样我们还有其他一些选择: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))];的好处是,如果数组实际上是空的,它会发出警告。

答案 5 :(得分:6)

另一种简单易用的方法是使用array_values

array_values($array)[0]

答案 6 :(得分:3)

我们可以做到 $first = reset($array);

而不是

reset($array);
$first = current($array);

作为reset()

在重置后返回数组的第一个元素;

答案 7 :(得分:3)

在获取第一个元素之前测试a变量是否为数组。如果将数组设置为null,则动态创建数组时会出现错误。

例如:

if(is_array($array))
{
  reset($array);
  $first = key($array);
}

答案 8 :(得分:2)

你可以试试这个。

获取数组的第一个值: -

<?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));
?>

答案 9 :(得分:2)

使用reset()函数从该数组中获取第一项,而不知道这样的密钥。

&#13;
&#13;
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
&#13;
&#13;
&#13;

输出// 400

答案 10 :(得分:1)

您可以使用array_shift

答案 11 :(得分:1)

我这样做是为了得到第一个和最后一个值。这也适用于更多值。

$a = array(
    'foo' => 400,
    'bar' => 'xyz',
);
$first = current($a);   //400
$last = end($a);    //xyz

答案 12 :(得分:1)

你可以:

$values = array_values($array);
echo $values[0];

答案 13 :(得分:1)

PHP 7.3.0开始,可以不用重置内部指针。您将使用array_key_first。如果确定数组中包含值,则可以执行以下操作:

$first = $array[array_key_first($array)];

更有可能,您需要处理数组为空的情况:

$first = (empty($array)) ? $default : $array[array_key_first($array)];

答案 14 :(得分:0)

您可以只使用$array[0]。它将始终为您提供第一项

答案 15 :(得分:0)

一行:

companyname

扩展:

$array['foo'] = 400;
$array['bar'] = 'xyz';
echo 'First value= ' . $array[array_keys($array)[0]];