如何获取数组中的最后一个键?

时间:2010-02-27 17:09:51

标签: php arrays

如何获取数组的最后一个键?

18 个答案:

答案 0 :(得分:580)

解决方案是使用endkey (引用)的组合:

  • end()将数组的内部指针前进到最后一个元素,并返回其值。
  • key()返回当前数组位置的索引元素。

因此,像这样的代码的一部分应该可以解决这个问题:

$array = array(
    'first' => 123,
    'second' => 456,
    'last' => 789, 
);

end($array);         // move the internal pointer to the end of the array
$key = key($array);  // fetches the key of the element pointed to by the internal pointer

var_dump($key);

将输出:

string 'last' (length=4)

即。我的数组的最后一个元素的关键。

完成此操作后,数组的内部指针将位于数组的末尾。正如评论中指出的那样,您可能希望在数组上运行reset()以将指针返回到数组的开头。

答案 1 :(得分:64)

虽然end()似乎是最简单的,但它并不是最快的。

更快,更强大的替代方案是array_slice()

  

编辑罢工:这项说法没有得到证实   评论中提到了相反的证据。如果有的话   对于这张海报关于速度/效率的断言然后a   必须提供基准测试。

$last_key = key( array_slice( $array, -1, 1, TRUE ) );

答案 2 :(得分:48)

我更喜欢

end(array_keys($myarr))

答案 3 :(得分:31)

PHP 7.3 (2018)起,有(最终)功能可以实现: http://php.net/manual/en/function.array-key-last.php

$array = ['apple'=>10,'grape'=>15,'orange'=>20];
echo array_key_last ( $array )

将输出

orange

答案 4 :(得分:29)

只需使用:echo $array[count($array) - 1];

答案 5 :(得分:19)

不知道这是否会更快或更快,但这样做似乎更容易,并且通过不将函数传递给end()来避免错误......

它只需要一个变量......写一行代码并不是什么大不了的事,如果你需要的话就取消设置。

$array = array(
    'first' => 123,
    'second' => 456,
    'last' => 789, 
);

$keys = array_keys($array);
$last = end($keys);

答案 6 :(得分:8)

尝试使用array_poparray_keys功能,如下所示:

<?php

$array = array(
    'one' => 1,
    'two' => 2,
    'three' => 3
);

echo array_pop(array_keys($array)); // prints three

?>

答案 7 :(得分:5)

从PHP> = 7.3开始,array_key_last()是获取数组中任何一个的最后一个键的最佳方法。仅仅使用end()key()reset()的组合来获取数组的最后一个键是令人发指的。

$array = array("one" => bird, "two" => "fish", 3 => "elephant");
$key = array_key_last($array);
var_dump($key) //output 3

将其与

进行比较
end($array)
$key = key($array)
var_dump($key) //output 3
reset($array)

如果使用end()key()的组合,则必须将数组重置为从开头开始的指针。

答案 8 :(得分:5)

PHP7.3 开始,您可以使用array_key_last()

直接访问数组(外部)中的最后一个键。

这意味着您无需以下操作即可检索最终键的值:

  1. 移动数组指针(需要两行代码)或
  2. 排序,反转,弹出,计数,索引键数组或任何其他伪造

此功能早就应该使用,并且是阵列功能工具带中值得欢迎的功能,它可以提高性能,避免不必要的副作用并启用干净/直接/直观的代码。

这里是demo

$array = ["a" => "one", "b" => "two", "c" => "three"];
if (!function_exists('array_key_last')) {
    echo "please upgrade to php7.3";
} else {
    echo "First Key: " , key($array) , "\n";
    echo "Last Key: " , array_key_last($array) , "\n";
    next($array);                 // move array pointer to second element
    echo "Second Key: " , key($array) , "\n";
    echo "Still Last Key: " , array_key_last($array);
}

输出:

First Key: a
Last Key: c     // <-- unaffected by the pointer position, NICE!
Second Key: b
Last Key: c     // <-- unaffected by the pointer position, NICE!

一些注意事项:

  • array_key_last()array_key_first()的兄弟功能。
  • 这两个函数都是“无指针的”。
  • 如果数组为空,则两个函数均返回null
  • 丢弃的同级函数(array_value_first()array_value_last())也会为书挡元素提供指针无知的访问,但是显然它们无法获得足够的票数才能生效。

以下是一些相关页面,讨论了新功能:

答案 9 :(得分:3)

您可以使用:

$array = array("one" => "apple", "two" => "orange", "three" => "pear");
end($array); 
echo key($array);

另一个解决方案是创建一个函数并使用它:

function endKey($array){
end($array);
return key($array);
}

$array = array("one" => "apple", "two" => "orange", "three" => "pear");
echo endKey($array);

答案 10 :(得分:3)

这很奇怪,但是为什么这个主题没有这个答案:

$lastKey = array_keys($array)[count($array)-1];

答案 11 :(得分:3)

我刚接受了Xander的辅助函数,并在之前用答案对其进行了改进:

function last($array){
  $keys = array_keys($array);
  return end($keys);
}


$arr = array("one" => "apple", "two" => "orange", "three" => "pear");    
echo last($arr);
echo $arr(last($arr));

答案 12 :(得分:3)

我还想为这个问题提供另一种解决方案。

假设您的所有密钥都是数字的,没有任何间隙, 我首选的方法是计算数组,然后从该值减1(以说明数组键从0开始的事实。

$array = array(0=>'dog', 1=>'cat');

$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];

var_dump($lastKey);
print_r($lastKeyValue);

这会给你:

  

INT(1)   猫

答案 13 :(得分:2)

$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3

答案 14 :(得分:0)

array_reverse()试试这个。

 $arr = array(
     'first' => 01,
     'second' => 10,
     'third' => 20, 
 );  
 $key = key(array_reverse($arr));
 var_dump($key);

答案 15 :(得分:0)

或者在php >= 7.3.0

您可以使用函数array_key_last()

如php.net中所述-获取数组的最后一个键

apply predefined state

答案 16 :(得分:-1)

也可以在线使用的最佳解决方案:

end($arr) && false ?: key($arr)

此解决方案仅是表达/陈述,提供的性能不是最佳的。

内联示例用法:

$obj->setValue(
    end($arr) && false ?: key($arr) // last $arr key
);


更新:在PHP 7.3+中:(当然)使用新添加的array_key_last()方法。

答案 17 :(得分:-1)

$array = array(
    'something' => array(1,2,3),
    'somethingelse' => array(1,2,3,4)
);

$last_value = end($array);
$last_key = key($array); // 'somethingelse'

这是有效的,因为PHP在内部为$ array

移动它的数组指针