简体   繁体   English

从PHP中的一维数组中找到最长和第二长的字符串

[英]Find the longest and second longest string from a one dimensional array in PHP

Can anyone help? 有人可以帮忙吗? I am trying to print out the longest string and second longest string in php 我正在尝试打印出php中最长的字符串和第二长的字符串

function findLongestStringFromArray($array = array()) {

    if(!empty($array)){
        $length_of_arr = array_map('strlen', $array); 
        $maxLength = max($length_of_arr); // find highest value in the array
        $key = array_search($maxLength, $length_of_arr);
        $key2 = array_search(next($maxLength), $length_of_arr);
        return array(
            'length' => $maxLength,
            'postion' => $key,
            'longest-string'=>$array[$key],
            'secondLongest-string'=>$array[$key2]
        );
    }
}
$arrData = array("car", "paper", "pencil", "football", "databases");
print_r(findLongestStringFromArray($arrData));

And then i get this error message Warning: next() expects parameter 1 to be array, integer given in C:\\xampp\\htdocs\\php\\lab2.php on line 134 Array ( [length] => 13 [postion] => 4 [longest- string] => databases [secondLongest-string] => car) 然后我收到此错误消息Warning: next() expects parameter 1 to be array, integer given in C:\\xampp\\htdocs\\php\\lab2.php on line 134 Array ( [length] => 13 [postion] => 4 [longest- string] => databases [secondLongest-string] => car)

I would suggest a different approach. 我建议使用另一种方法。 Sort the input array in descending order by strlen , and then return the first two elements with array_slice . strlen降序对输入数组进行排序,然后使用array_slice返回前两个元素。

function findLongestStringFromArray($array = array()) {
    usort($array, function($a, $b) {
        return strlen($b) - strlen($a);
    });
    $longest = array_slice($array, 0, 2);
    return array_combine(['longest-string','secondLongest-string'], $longest);
}

To include the length and position as well, you'd need to use uasort instead of usort to preserve the keys. 要同时包含长度和位置,您需要使用uasort而不是usort来保存键。

function findLongestStringFromArray($array = array()) {
    uasort($array, function($a, $b) {
        return strlen($b) - strlen($a);
    });
    return [
        'length' => strlen(reset($array)),
        'position' => key($array),
        'longest-string' => reset($array),
        'secondLongest-string' => next($array)
    ];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM