2010-08-06 21 views
5

Ho il seguente array. Devo ordinare questa matrice dal vettore annidato tasto [id]:Ordinamento multidimensionale di array PHP

Array ( 
[0] => Array ([id] => 5 [category_id] => 12) 
[1] => Array ([id] => 3 [category_id] => 12) 
[2] => Array ([id] => 9 [category_id] => 12) 
[3] => Array ([id] => 4 [category_id] => 12) 
) 
+0

duplicati di http://stackoverflow.com/questions/3376607/help-sorting-this-array/3376735 # 3376735 – stillstanding

risposta

2

si può fare in questo modo

foreach($arr as $val) { 
    $ret[$val['id']] = $val['category_id']; 
} 
ksort($ret); 

nel caso in cui si desidera ottenere lo stesso array ordinato allora si può aggiungere il seguente codice:

foreach($ret as $key=>$val) { 
    $newArr[] = array('id'=>$key,'category_id'=>$val); 
} 
0

provare array_multisort sarà ordinare l'array esterno dalla prima chiave/proprietà delle matrici interne

0
function sort_by_field($field, & $data) { 
    $sort_func = create_function('$a,$b', 'if ($a["' . $field . '"] == $b["' . $field . '"]) {return 0;} 
      return ($a["' . $field . '"] < $b["' . $field . '"]) ? -1 : 1;'); 

    uasort($data, $sort_func); 
} 
8

Uso usort con una funzione di confronto personalizzata.

<?php 

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

$array = Array ( 
    0 => Array ('id' => 5, 'category_id' => 12), 
    1 => Array ('id' => 4, 'category_id' => 12), 
    2 => Array ('id' => 7, 'category_id' => 12), 
    3 => Array ('id' => 3, 'category_id' => 12), 
); 

usort($array, 'cmp'); 

// Output: 3 4 5 7 
foreach ($array as $element) 
    echo $element['id'], " "; 
+0

+1 una buona soluzione universale. – Centurion

+0

Si potrebbe semplicemente restituire '$ a ['id'] - $ b ['id']' nella funzione 'cmp'. – Artefacto

1

Perché non archiviare i dati in questo modo?

Array ( 
    [5] => int(12) 
    [3] => int(12) 
    [9] => int(12) 
    [4] => int(12) 
) 

Quindi è possibile utilizzare semplicemente ksort() come al solito.

+1

Ecco come faccio array in cui ho solo bisogno di mappare due numeri insieme. Potrebbe non essere così esplicito, ma ci rende molto più facile lavorare con esso. – tj111

Problemi correlati