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

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

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

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

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

【问题讨论】:

    标签: php php arrays key highest


    【解决方案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”

      【讨论】:

      【解决方案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);
          }
          

          【讨论】:

          • 密钥字符串的长度与最高密钥有什么关系?这也假设键是字符串,对于问题中显示的数据也不正确。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多