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