在数组中搜索最高的键/索引

Posted

技术标签:

【中文标题】在数组中搜索最高的键/索引【英文标题】:Search for highest key/index in an array 【发布时间】:2011-09-01 20:02:24 【问题描述】:

如何在php 的数组中获得最高 key/index?我知道如何为价值观做这件事。

例如:我想从这个数组中获取10 作为integer 值:

$arr = array(1 => "A", 10 => "B", 5 => "C");

我知道如何编写代码,但我在问自己是否也有这样的功能。

【问题讨论】:

【参考方案1】:

这应该可以正常工作

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));

【讨论】:

你知道如果这样设置一个键是否也能正常工作: $arr = array( 1 => "A", 10 => "B", 5 => "C" , "15" => "D"); @Raffael Luthiger 尝试对其进行测试,看看您是否得到了正确的结果。 这不处理空数组的情况。直接来自max 的 PHP 手册:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted. 不适用于空/1 元素数组【参考方案2】:

你可以通过这种方式获得最大密钥:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>

【讨论】:

对不起,有人在我之前发布了相同的答案。 不适用于空/1 元素数组【参考方案3】:

我有一种情况需要获取数组中的下一个可用键,即highest + 1

例如,如果数组是$data = ['1' =&gt; 'something, '34' =&gt; 'something else'],那么我需要计算35 以向数组中添加一个新元素,该元素的键比其他任何一个都高。在空数组的情况下,我需要 1 作为下一个可用键。

这是有效的解决方案:

$highest = 0;
foreach ($data as $idx => $dummy) 
    if ($idx > $highest) $highest = $idx;

$highest++;

它适用于所有情况,无论是否为空数组。如果你只需要找到最高的键而不是highest key + 1,删除最后一行。

如果数组为空,您将获得 0 的值。

【讨论】:

【参考方案4】:
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

应该打印“10”

【讨论】:

rsort 总是返回 true php.net/manual/en/function.rsort.php【参考方案5】:

尝试max() 函数,查看该页面上的第一条评论。

【讨论】:

【参考方案6】:
function getMaxKey(array $array): ?int

    if ($array === []) 
        return null;
    

    return max(0, ...array_keys($array));

假设你没有像 int -1 这样的否定键

【讨论】:

【参考方案7】:
$higestKey = 0;
foreach ($data as $key => $value) 
    if (strlen($key) > $higestKey) $higestKey = strlen($key);

【讨论】:

密钥字符串的长度与最高密钥有什么关系?这也假设键是字符串,对于问题中显示的数据也不正确。

以上是关于在数组中搜索最高的键/索引的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 和数组进行 cloudKit 搜索

在数组中搜索给定的值,如果成功则返回首个相应的键名?

C#查找最高数组值和索引

Javascript 在数组中搜索一个值并获取它的键

递归搜索数组中的键

MySQL通过数组中的键搜索json值