【发布时间】:2009-11-19 10:03:32
【问题描述】:
假设我有这个数组:
$array[] = 'foo';
$array[] = 'apple';
$array[] = '1234567890;
我想得到这个数组中最长的字符串的长度。本例中最长的字符串为1234567890,长度为10。
如果不循环遍历数组并检查每个元素,这是否可行?
【问题讨论】:
假设我有这个数组:
$array[] = 'foo';
$array[] = 'apple';
$array[] = '1234567890;
我想得到这个数组中最长的字符串的长度。本例中最长的字符串为1234567890,长度为10。
如果不循环遍历数组并检查每个元素,这是否可行?
【问题讨论】:
试试
$maxlen = max(array_map('strlen', $ary));
【讨论】:
"strlen" 很漂亮,你应该看看直接通过strlen 的JavaScript 或通过::strlen 的Java。将字符串作为可调用对象传递是 PHP 中许多语言设计问题的根源。
当然:
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);
那里没有循环。 ;-)
【讨论】:
门票的一个小补充。我来到这里遇到了类似的问题:通常你必须输出数组中最长的字符串。
为此,您还可以使用顶级解决方案并对其进行一些扩展:
$lengths = array_map('strlen', $ary);
$longestString = $ary[array_search(max($lengths), $lengths)];
【讨论】:
遍历数组并使用strlen 来验证当前长度是否比前一个长。并将最长字符串的索引保存在一个变量中,稍后在需要该索引的地方使用它。
像这样..
$longest = 0;
for($i = 0; $i < count($array); $i++)
{
if($i > 0)
{
if(strlen($array[$i]) > strlen($array[$longest]))
{
$longest = $i;
}
}
}
【讨论】:
这样你可以找到最短(或最长)的元素,但不能找到它的索引。
$shortest = array_reduce($array, function ($a, $b) {
if ($a === null) {
return $b;
}
return strlen($a) < strlen($b) ? $a : $b;
});
【讨论】: