2011-06-03 10 views
5

quiero crear una nueva matriz con el valor MAX duplicado de una matriz y poner otro valor duplicado en una otra matrizCrear una matriz con el valor duplicado de una matriz (PHP)

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

y quiero que esto resultado

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

¡Gracias!

+1

¿Sería mejor llamar '$ otherArray'' MinArray'? ¿O debería contener '' b '=> 5'? –

Respuesta

2

En primer lugar, encontrar el valor máximo:

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

En segundo lugar, encontrar los valores que aparecen más de una vez:

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

último , compruebe las matrices originales para valores que coincidan con $maxValue o valores que se enumeran en $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; 
    } 
} 

que obtendrá:

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

Nota: No estaba segura de si quería la $MaxArray para contener los elementos de valor máximo sólo si aparece más de una vez en la matriz de origen . Si es así, simplemente cambie la llamada max a:

$maxValue = max($dups); 
+0

thx para la respuesta rápida! Eso funciona bien –

+0

última pregunta, ¿puedo poner mi [código] <'b'=> '5 [/ code} en otra matriz como $ rest = array (' c '=>' 5 '); –

+0

@ user763045: Sí, solo agrega una cláusula 'else' extra. Ver mi respuesta actualizada. – netcoder

2

Puede usar array_values(array_intersect($array1, $array2)) para obtener valores duplicados, y luego hacer un bucle para capturar las claves que tienen esos valores y almacenarlos en otra matriz.

$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

Si observa la pregunta, no creo que al OP le preocupen tanto los duplicados como la búsqueda de los elementos para los valores máximos y mínimos. –

+0

Vaya ... Lo actualicé para solucionar esto. – Doug

1

Si está buscando para encontrar elementos con los valores mínimo y máximo de una matriz, lo siguiente funcionará.

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

Puede reconstruir sus arreglos de ejemplo con estas teclas en un bucle. O acceda a ellos directamente, es decir, $etudiant[$min_keys].

Mira la documentación para array_keys, min, max

Cuestiones relacionadas