从数组创建一个具有重复值的数组(PhP)

时间:2011-06-03 20:14:54

标签: php arrays max

我想创建一个具有来自数组的重复MAX值的新数组 并将其他重复值放在另一个数组中

      $etudiant = array ('a'=>'2','b'=>'5', 'c'=>'6', 'd'=>'6', 'e'=>'2');

我想要这个结果

     $MaxArray =  array ('c'=>'6', 'd'=>'6');
     $otherarray1 =  array ('a'=>'2', 'e'=>'2');

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用array_values(array_intersect($array1, $array2))来获取重复的值,然后创建一个循环来捕获具有这些值的键并将它们存储到另一个数组中。

$dups = array_values(array_intersect($array1, $array2))
$max = max($dups);
$result = array();

foreach ($array1 as $key => $value){
  if (in_array($value, $dups)) {
    $result[$key] = $value;
  }
}

foreach ($array2 as $key => $value){
  if (in_array($value, $dups)) {
    $result[$key] = $value;
  }
}

$maxArray = array();
foreach ($dups as $key => $value) {
  if ($value == $max){
    $maxArray[$key] = $value;
  }
}

// results are in $dups and $maxArray

答案 1 :(得分:2)

首先,找到最大值:

$etudiant = array ('a'=>'2','b'=>'5', 'c'=>'6', 'd'=>'6', 'e'=>'2');
$maxValue = max($etudiant);

其次,找到出现多次的值:

$dups = array_diff_assoc($etudiant, array_unique($etudiant));

最后,检查原始数组中与$maxValue匹配的值或$dups中列出的值:

$MaxArray = $OtherArray = $ElseArray = array();
foreach ($etudiant as $key => $value) {
    if ($value == $maxValue) {
        $MaxArray[$key] = $value;
    } else if (in_array($value, $dups)) {
        $OtherArray[$key] = $value;
    } else {
        $ElseArray[$key] = $value;
    }
}

你会得到:

$MaxArray: Array
(
    [c] => 6
    [d] => 6
)
$OtherArray: Array
(
    [a] => 2
    [e] => 2
)

注意:我不确定您是否希望$MaxArray仅在源数组中出现多次时才包含最大值元素。如果是这样,只需将max调用更改为:

$maxValue = max($dups);

答案 2 :(得分:1)

如果您要查找具有数组中最小值和最大值的元素,以下内容将起作用。

// get min keys
$min_value = min($etudiant);
$min_keys = array_keys($etudiant, $min_value);

// get max keys
$max_value = max($etudiant);
$max_keys = array_keys($etudiant, $max_value);

然后,您可以在循环中使用这些键重建示例数组。或直接访问它们,即$etudiant[$min_keys]

查看array_keysminmax

的文档