在多维数组中查找最短的数组计数

时间:2014-02-18 12:09:54

标签: php arrays sorting

我有一个多维数组:

$arr = array(
    array('lions', 'tigers', 'bears'), // count = 3
    array('dogs', 'cats'), // count = 2
    array('horses', 'pigs', 'cattle', 'sheep', 'chickens') // count = 5
);

我想返回具有最低计数的数组(我不需要知道计数,只需要具有最低计数的数组)。在这种情况下,array('dogs', 'cats')

现在我有:

$lowest = null;

foreach($nodePath as $arr)
{
    $lowest = count($arr) < count($lowest) || $lowest == null ? $arr : $lowest;
}

这有效,但我想知道我是否错过了一个更加包含的解决方案,可能使用array_maparray_walk或类似功能。

2 个答案:

答案 0 :(得分:2)

使用array_map()count作为回调来获取每个数组中的元素数量min()以获得最小值。然后,要获取最小数组的键 - 使用array_flip()翻转数组键和值,并访问$min索引。现在您可以使用该键来获取所需的数组:

$counts = array_map('count', $arr);
$min = min($counts);
$key = array_flip($counts)[$min];
$smallest_arr = $arr[$key];

Demo

答案 1 :(得分:2)

将数组映射到另一个数组,其中包含每个子数组的计数。获取此新数组中最小值的键。最小的数组具有最小值的键:

$count = array_map('count', $arr);
$min = array_keys($count , min($count))[0];

var_dump($arr[$min]); // Array ( [0] => dogs [1] => cats )

Eval.in