2010-04-20 11 views
14

Tengo una matriz compuesta de matrices. Quiero ordenar la matriz principal por una propiedad de las matrices secundarias. He aquí un ejemploOrdenar una matriz por el valor de una matriz secundaria en PHP

array(2) { 
    [0]=> 
    array(3) { 
    [0]=> 
    string(6) "105945" 
    [1]=> 
    string(10) "First name" 
    [2]=> 
    float(0.080878465391) 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(6) "109145" 
    [1]=> 
    string(11) "Second name" 
    [2]=> 
    float(0.0504154818384) 
} 

quisiera ordenar la matriz de los padres por [2] ascendente en las matrices de los niños, por lo que en este caso el resultado sería el subarrays inversa (.05, 08). ¿Es esto posible usar cualquiera de las numerosas funciones de clasificación de PHP?

Respuesta

24

Puede hacer uso de usort función que:

$arr = array(
       array("105945","First name",0.080878465391), 
       array("109145","Second name",0.0504154818384) 
      ); 

function cmp($a, $b) { 
     if ($a[2] == $b[2]) { 
       return 0; 
     } 
     return ($a[2] < $b[2]) ? -1 : 1; 
} 

usort($arr,"cmp"); 
+0

El ejemplo n. ° 2 en esa página es muy similar a lo que intenta hacer, eche un vistazo a eso. –

+0

He actualizado mi respuesta con exactamente lo que quiere. – codaddict

+0

Guau, respuesta increíblemente útil. Gracias. – Evan

-2

ver esta página, por ejemplo,

http://php.net/manual/en/function.sort.php 

o ejemplo

 <?php 
function multisort($array, $sort_by) { 
    foreach ($array as $key => $value) { 
     $evalstring = ''; 
     foreach ($sort_by as $sort_field) { 
      $tmp[$sort_field][$key] = $value[$sort_field]; 
      $evalstring .= '$tmp[\'' . $sort_field . '\'], '; 
     } 
    } 
    $evalstring .= '$array'; 
    $evalstring = 'array_multisort(' . $evalstring . ');'; 
    eval($evalstring); 

    return $array; 
} 

$test = array(
    array('a' => '1', 'b' => '3'), 
    array('a' => '2', 'b' => '1'), 
    array('a' => '1', 'b' => '1')); 

echo 'Unsorted: '; 
print_r($test); 

$result = multisort($test , array('a','b')); 

echo 'Sorted: '; 
print_r($result); 
?> 

Result: 

Unsorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [1] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

    [2] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

) 
Sorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

    [1] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [2] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

) 
+1

Este es un código muy aterrador. Le recomiendo que no lo use. Use 'usort()' como se recomienda. –

+0

hey usort() ya se proporciona la función. Entonces solo proporciono la solución alternativa que proporciono el ejemplo del manual. – Karthik

4

Para la base de datos como patrones de uso de array_multisort como se ve en ejemplo # 3.

Por ejemplo:

$sort = array(); 
foreach ($data as $key => $row) { 
    $sort[$key] = $row['basis']; 
} 
array_multisort($sort, SORT_ASC, $data); 

donde $data es su matriz de datos y basis es el elemento utilizado para la clasificación.

+0

¡Fantástico! Gracias por compartir. – BarryMode

Cuestiones relacionadas