[英]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.