2012-07-26 50 views
4

数组是这样的:如何确定某个数组列的最大长度?

array(
    array(5, true, 'Foo'), 
    array(8, true, 'Bar'), 
    array(8, true, 'FooBar'), 
) 

我能确定第三列的最长的字符串长度,而不必遍历数组了吗?

在我的例子中,最长的字符串是“FooBar” - 6个字符。

如果内部数组只有字符串元素,我可以做max(array_map('strlen', $arr)),但它有3项...

回答

2

添加array_map('array_pop', $arr)进来:

<?php 

$arr = array(
    array(5, true, 'Foo'), 
    array(8, true, 'Bar'), 
    array(8, true, 'FooBarss') 
); 

print_r(max(array_map('strlen', array_map('array_pop', $arr)))); 

?> 

http://codepad.org/tRzHoy7Z

给出8(我加了两个ss来检查)。 array_pop()关闭最后一个数组元素并返回它,使用array_shift()获取第一个。

2

首先,我很确定max函数遍历整个数组。但如果你使用它很好,那么你可以定义你自己的比较函数并传递它。

function cmp($a, $b) { 
    if (strlen($a[2]) == strlen($b[2]))) 
     return 0; 
    return (strlen($a[2]) < strlen($b[2])) ? -1 : 1; 
} 

max(array_map('cmp', $arr)) 
+0

第二行有语法错误。至少根据此键盘上的测试,[这不起作用](http://codepad.org/Tr2nXf8M)。 – 2012-07-26 23:20:27