从一个数组创建一个包含重复值的数组(PhP)

5
我想要创建一个新的数组,其中包含原数组中重复的最大值,并将其他重复的值放入另一个数组。
      $etudiant = array ('a'=>'2','b'=>'5', 'c'=>'6', 'd'=>'6', 'e'=>'2');

and i want this result

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

谢谢!

1
$otherArray 应该更名为 MinArray 吗?或者它实际上应该包含 'b'=>5 吗? - Richard JP Le Guen
3个回答

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

如果您查看问题,我认为原帖并不关心重复项,而更多的是找到最大值和最小值的元素。 - Jason McCreary

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);

最后一个问题,我可以将我的[code]<'b'=>'5[/code]放入另一个数组中,例如$rest= array ('c'=>'5');吗? - Kevin Houde
@user763045:是的,只需添加一个额外的“else”子句。请查看我的更新答案。 - netcoder

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的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接