2013-02-21 17 views
8

Es gibt ähnliche Fragen und Antworten zu diesem Thema, aber keine von ihnen passt recht gut zur Struktur meines Arrays, also entschuldige mich, wenn ich etwas verpasst habe. Dies ist ein Array durch die Wordpress wpdb Klasse generiert:Mehrdimensionale Arrays nach Sub-Array-Schlüssel sortieren

Array ( 
[0] => Array ([meta_id] => 37850 [post_id] => 5548 [meta_key] => Item # [meta_value] => 66002) 
[1] => Array ([meta_id] => 37851 [post_id] => 5548 [meta_key] => Hex Size [meta_value] => .051") 
[2] => Array ([meta_id] => 37852 [post_id] => 5548 [meta_key] => Across Flats [meta_value] => 0.051) 
[3] => Array ([meta_id] => 37853 [post_id] => 5548 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37854 [post_id] => 5548 [meta_key] => Shank [meta_value] => .315")) 

Array ( 
[0] => Array ([meta_id] => 37910 [post_id] => 5553 [meta_key] => Item # [meta_value] => 66008) 
[1] => Array ([meta_id] => 37911 [post_id] => 5553 [meta_key] => Hex Size [meta_value] => 1/8") 
[2] => Array ([meta_id] => 37912 [post_id] => 5553 [meta_key] => Across Flats [meta_value] => 0.127) 
[3] => Array ([meta_id] => 37913 [post_id] => 5553 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37914 [post_id] => 5553 [meta_key] => Shank [meta_value] => .315")) 

Array ( 
[0] => Array ([meta_id] => 37862 [post_id] => 5549 [meta_key] => Item # [meta_value] => 66004) 
[1] => Array ([meta_id] => 37863 [post_id] => 5549 [meta_key] => Hex Size [meta_value] => 1/16") 
[2] => Array ([meta_id] => 37864 [post_id] => 5549 [meta_key] => Across Flats [meta_value] => 0.063) 
[3] => Array ([meta_id] => 37865 [post_id] => 5549 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37866 [post_id] => 5549 [meta_key] => Shank [meta_value] => .315")) 

Array ( 
[0] => Array ([meta_id] => 37886 [post_id] => 5551 [meta_key] => Item # [meta_value] => 66006) 
[1] => Array ([meta_id] => 37887 [post_id] => 5551 [meta_key] => Hex Size [meta_value] => 3/32") 
[2] => Array ([meta_id] => 37888 [post_id] => 5551 [meta_key] => Across Flats [meta_value] => 0.095) 
[3] => Array ([meta_id] => 37889 [post_id] => 5551 [meta_key] => Type [meta_value] => Hexagonal) 
[4] => Array ([meta_id] => 37890 [post_id] => 5551 [meta_key] => Shank [meta_value] => .315")) 

Ich brauche sie zur Liste im Auftrag von Array [meta_value]. Dann benutze ich das Array, um eine Tabelle von Produkten in dieser Reihenfolge zu erzeugen. Ich habe mit der folgenden Funktion gearbeitet, aber es erzeugt ein Ergebnis, das keinen Sinn macht:

function subval_sort($a,$subkey) { 
    foreach($a as $k=>$v) { 
     $b[$k] = strtolower($v[$subkey]); 
    } 
    asort($b); 
    foreach($b as $key=>$val) { 
     $c[] = $a[$key]; 
    } 
    return $c; 
} 
+0

Es gibt wahrscheinlich eine Möglichkeit, dies in der Abfrage selbst zu tun ... einfach posten, wie Sie diese Informationen generieren. – jondavidjohn

+0

Möchten Sie alle diese Arrays vor dem Sortieren zusammenführen, oder möchten Sie nur sortieren sie "in ihrem Sub-Array"? – Passerby

Antwort

20

Verwenden usort(), Beispiel:

$items = [ 
    ['id' => 3, 'item' => 'pc'], 
    ['id' => 1, 'item' => 'mouse'], 
    ['id' => 2, 'item' => 'kb'], 
]; 

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

usort($items, 'compare_id'); 

var_dump($items);  

oder mit einem anonymen Funktion

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

Dies sollte die akzeptierte Antwort sein. Habe es in einem Augenblick geschafft! – Laci

Verwandte Themen