2011-06-03 101 views
5

我想從一個數組 創建複製MAX值的新陣列,並在其他陣列從陣列(PHP)創建帶有重複值的數組

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

把其他重複的值,我想這結果

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

謝謝!

+1

'$ otherArray'會更好地命名爲'MinArray'嗎?或者它應該包含「b」=> 5'? – 2011-06-03 20:16:21

回答

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匹配的值或中列出的值:

$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); 
+0

thx快速回復!這工作很好 – 2011-06-03 20:50:40

+0

最後一個問題,我可以把我的[代碼] <'b'=>'5 [/ code}在其他數組,如 $ rest = array('c'=>'5'); – 2011-06-03 21:10:00

+0

@ user763045:是的,只需添加一個額外的'else'子句。看到我更新的答案。 – netcoder 2011-06-03 21:17:11

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 
+0

如果你看看這個問題,我不認爲OP會擔心重複和查找最大值和最小值的元素一樣多。 – 2011-06-03 20:20:47

+0

糟糕...我更新了它來解決這個問題。 – Doug 2011-06-03 21:37:03

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