Создать массив с дублированным значением из массива (PhP) - PullRequest
5 голосов
/ 04 июня 2011

Я хочу создать новый массив с дублированным значением 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 ]

2 голосов
/ 04 июня 2011

Сначала найдите максимальное значение:

$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 голосов
/ 04 июня 2011

Вы можете использовать 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 голос
/ 04 июня 2011

Если вы хотите найти элементы с минимальными и максимальными значениями из массива, сработает следующее:

// 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_keys , min , max

...