【问题标题】:How to get the length of longest string in an array如何获取数组中最长字符串的长度
【发布时间】:2009-11-19 10:03:32
【问题描述】:

假设我有这个数组:

$array[] = 'foo';
$array[] = 'apple';
$array[] = '1234567890;

我想得到这个数组中最长的字符串的长度。本例中最长的字符串为1234567890,长度为10。

如果不循环遍历数组并检查每个元素,这是否可行?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    试试

    $maxlen = max(array_map('strlen', $ary));
    

    【讨论】:

    • @ClickUpvote 它被称为函数式编程,是的,它很漂亮。
    • @Tobia 如果你说"strlen" 很漂亮,你应该看看直接通过strlen 的JavaScript 或通过::strlen 的Java。将字符串作为可调用对象传递是 PHP 中许多语言设计问题的根源。
    【解决方案2】:

    当然:

    function getmax($array, $cur, $curmax) {
      return $cur >= count($array) ? $curmax :
        getmax($array, $cur + 1, strlen($array[$cur]) > strlen($array[$curmax])
               ? $cur : $curmax);
    }
    
    $index_of_longest = getmax($my_array, 0, 0);
    

    那里没有循环。 ;-)

    【讨论】:

    • 免责声明:我确实明白问题中的“无循环”也意味着“无递归”,但我无法抗拒......
    • 很好的答案:P 如果我当天没有达到投票上限,我会投票给你...
    【解决方案3】:

    门票的一个小补充。我来到这里遇到了类似的问题:通常你必须输出数组中最长的字符串。

    为此,您还可以使用顶级解决方案并对其进行一些扩展:

    $lengths       = array_map('strlen', $ary);
    $longestString = $ary[array_search(max($lengths), $lengths)];
    

    【讨论】:

      【解决方案4】:

      遍历数组并使用strlen 来验证当前长度是否比前一个长。并将最长字符串的索引保存在一个变量中,稍后在需要该索引的地方使用它。

      像这样..

      $longest = 0;
      for($i = 0; $i < count($array); $i++)
      {
        if($i > 0)
        {
          if(strlen($array[$i]) > strlen($array[$longest]))
          {
            $longest = $i;
          }
        }
      }
      

      【讨论】:

      • 但问题明确表示“不循环遍历数组并检查每个元素?”
      • 执行此类任务的基本机制仍然是“循环”,例如使用 array_map() 使其对用户透明。
      • 如果你想从一个集合中得到一个指定的项目,你总是需要遍历这个集合。以这种或那种方式。 ;)
      【解决方案5】:

      这样你可以找到最短(或最长)的元素,但不能找到它的索引。

      $shortest = array_reduce($array, function ($a, $b) {
      
          if ($a === null) {
              return $b;
          }
      
          return strlen($a) < strlen($b) ? $a : $b;
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多