Php 确定包含最多项的数组的方法?

Php 确定包含最多项的数组的方法?,php,arrays,Php,Arrays,假设我有一个数组,其中有4个数组。我需要做的是取一个有最多数字的数组,如果我有两个或更多的数组有相同的最大数字,我会把它们组合起来 例如数组,我们看到数组0和3的最大成员数为3。所以我要做的就是把它们结合起来 Array ( [0] => Array ( [0] => 5 [1] => 6 [2] => 4 ) [1] => Array

假设我有一个数组,其中有4个数组。我需要做的是取一个有最多数字的数组,如果我有两个或更多的数组有相同的最大数字,我会把它们组合起来

例如数组,我们看到数组
0
3
的最大成员数为
3
。所以我要做的就是把它们结合起来

Array
(
    [0] => Array
        (
            [0] => 5
            [1] => 6
            [2] => 4
        )

    [1] => Array
        (
            [0] => 5
            [1] => 6
        )

    [2] => Array
        (
            [0] => 4
        )

    [3] => Array
        (
            [0] => 6
            [1] => 6
            [2] => 9
        )
)
这就是我所拥有的,它是有效的,但我认为它可以做得更好

// Getting arrays that have most members in it
$max = count($groupArray[0]);
foreach ($groupArray as $group) {
    if (count($group) > $max) {
        $max = count($group);
    }
}

// Taking all those arrays and combining them in one
$finishArray = array();
foreach ($groupArray as $group) {
    if (count($group) == $max) {
        foreach ($group as $key) {
            array_push($finishArray, $key);
        }
    }
}

那么,它可以做得更好吗?或者它应该是这样的?

我认为你可以在一个循环而不是两个循环中完成它

不要在一个循环中查找最大值并在第二个循环中搜索该最大值,而是在循环时搜索,如果找到更大的数组并重置结果,则更改最大值。你知道在那一点之前没有对手,所以你可以继续

$max = 0;

foreach($groupArray as $arr) {
    $count = count($arr);
    if($count > $max) {
        $result = $arr;
        $max = $count;
    } else if($count == $max) {
        $result = array_merge($result, $arr);
    }
}

我认为你可以在一个循环而不是两个循环中完成

不要在一个循环中查找最大值并在第二个循环中搜索该最大值,而是在循环时搜索,如果找到更大的数组并重置结果,则更改最大值。你知道在那一点之前没有对手,所以你可以继续

$max = 0;

foreach($groupArray as $arr) {
    $count = count($arr);
    if($count > $max) {
        $result = $arr;
        $max = $count;
    } else if($count == $max) {
        $result = array_merge($result, $arr);
    }
}

你所做的很管用,我不知道能改进多少,但我会试试

要获得最大计数,可以执行以下操作(
array\u map
非常棒):

如果您有PHP5.3,可以执行以下操作:

$max = max(array_map(function($a){return count($a);}, $groupArray));
至于第二部分,您必须循环遍历数组并获得相同长度的数组(就像您所做的那样),但是您可以使用
array\u push
,而不是循环遍历并使用
array\u merge

$finishArray = array();
foreach($groupArray as $group){
    if(count($group) === $max){
        $finishArray = array_merge($finishArray, $group);
    }
}

你所做的很管用,我不知道能改进多少,但我会试试

要获得最大计数,可以执行以下操作(
array\u map
非常棒):

如果您有PHP5.3,可以执行以下操作:

$max = max(array_map(function($a){return count($a);}, $groupArray));
至于第二部分,您必须循环遍历数组并获得相同长度的数组(就像您所做的那样),但是您可以使用
array\u push
,而不是循环遍历并使用
array\u merge

$finishArray = array();
foreach($groupArray as $group){
    if(count($group) === $max){
        $finishArray = array_merge($finishArray, $group);
    }
}

您不需要在
$groupArray
中循环两次,只需存储最长子级的索引即可

<?php

$indices = array();
$max_len = 0;

for ($i=0, $n=count($groupArray); $i<$n; $i++) {
    $tmp = count( $groupArray[$i] );
    if ( $tmp > $max_len ) {
        $max_len = $tmp;
        $indices = array($i);
    } elseif ( $tmp == $max_len ) {
        $indices[] = $i;
    }
}

$finishArray = array();
for ($i=0, $n=count($indices); $i<$n; $i++) {
    $finishArray = array_merge( $finishArray, $groupArray[ $indices[$i] ] );
}

您不需要在
$groupArray
中循环两次,只需存储最长子级的索引即可

<?php

$indices = array();
$max_len = 0;

for ($i=0, $n=count($groupArray); $i<$n; $i++) {
    $tmp = count( $groupArray[$i] );
    if ( $tmp > $max_len ) {
        $max_len = $tmp;
        $indices = array($i);
    } elseif ( $tmp == $max_len ) {
        $indices[] = $i;
    }
}

$finishArray = array();
for ($i=0, $n=count($indices); $i<$n; $i++) {
    $finishArray = array_merge( $finishArray, $groupArray[ $indices[$i] ] );
}

您可以使用array\u merge(),而不是将数组中的所有项推送到另一个数组中。这是我第一眼看到的唯一更改。您可以使用array\u merge()而不是将数组中的所有项推送到另一个数组中。这是我第一眼看到的唯一改变。我在这里做了一个改变,他希望最后的数组包含所有的值,而不是值的数组。因此,我将更改
$result[]=$arr
$result=array\u merge($result,$arr)
@marvin:我做得更好:-P(
$result=array();
不再是必需的,因为现在你有了
$result=$arr
)。我在这里做一个更改,他希望最后的数组包含所有值,而不是值的数组。因此,我将更改
$result[]=$arr
$result=array\u merge($result,$arr)
@marvin:我做得更好了:-P(
$result=array();
现在不再需要了,因为您有了
$result=$arr
)。