2016-09-03 5 views
0

Ich habe das folgende Array, das mit get_children() aus WordPress generiert wurde. Das Problem ist, dass es nicht scheint, die Ausgabe durch die in Wordpress verwendete Menüfolge zu ordnen.PHP-Array nach innerem Wert sortieren

Das Balg-Array muss also nach dem inneren Wert des Schlüssels [menu_order] sortiert werden. Ich habe eine Reihe von verschiedenen Möglichkeiten mit usort usw. ausprobiert, aber es scheint nicht zu funktionieren.

Array 
(
[40] => WP_Post Object 
    (
     [ID] => 40 
     [post_author] => 1 
     [post_date] => 2016-09-03 19:31:25 
     [post_date_gmt] => 2016-09-03 19:31:25 
     [post_content] => test 2 
     [post_title] => Test 2 
     [post_excerpt] => 
     [post_status] => publish 
     [comment_status] => closed 
     [ping_status] => closed 
     [post_password] => 
     [post_name] => test-2 
     [to_ping] => 
     [pinged] => 
     [post_modified] => 2016-09-03 19:56:04 
     [post_modified_gmt] => 2016-09-03 19:56:04 
     [post_content_filtered] => 
     [post_parent] => 2 
     [guid] => http://example.com/2 
     [menu_order] => 2 
     [post_type] => page 
     [post_mime_type] => 
     [comment_count] => 0 
     [filter] => raw 
    ) 

[38] => WP_Post Object 
    (
     [ID] => 38 
     [post_author] => 1 
     [post_date] => 2016-09-03 19:23:18 
     [post_date_gmt] => 2016-09-03 19:23:18 
     [post_content] => test 1 
     [post_title] => Test 1 
     [post_excerpt] => 
     [post_status] => publish 
     [comment_status] => closed 
     [ping_status] => closed 
     [post_password] => 
     [post_name] => test-1 
     [to_ping] => 
     [pinged] => 
     [post_modified] => 2016-09-03 19:51:17 
     [post_modified_gmt] => 2016-09-03 19:51:17 
     [post_content_filtered] => 
     [post_parent] => 2 
     [guid] => http://example.com/1 
     [menu_order] => 1 
     [post_type] => page 
     [post_mime_type] => 
     [comment_count] => 0 
     [filter] => raw 
    ) 
) 
+0

Verwenden Sie 'usort' und stellen Sie eine benutzerdefinierte Funktion (vorzugsweise einen Abschluss) zur Verfügung, die das Element vergleicht. –

Antwort

0

Dies ist ein typisches usecase für usort

usort($array, function($a, $b){ 
    return $a['menu_order'] > $b['menu_order']; 
}); 
+0

Sie sollen "0", "1" oder "-1" zurückgeben. –

+0

Funktioniert in beiden Richtungen. – Dragony

1

Obwohl Sie usort mit einem Rückruf verwenden könnten, die richtige Lösung wäre über get_children() Artikel direkt bestellt zu beantragen. Sie können dies erreichen, indem Sie das Argument orderby verwenden. Wie folgt aus:

$children = get_children(array(
    // other args here 
    'orderby' => 'menu_order' 
)); 

Siehe Wordpress get_children() und get_posts() für weitere Details.

+0

Ich möchte darauf hinweisen, dass Sie 'orderby' nicht mit get_children() verwenden können –

+0

@David Cassidy: Da die 'get_children()' Implementierung ihre Argumente an 'get_posts()' weiterleitet, unterstützt sie alle Argumente, die von 'get_posts unterstützt werden() '. Siehe [get_children() Implementierung] (https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/post.php#L345). Die Dokumentation von 'get_children()' sagt auch _ "Hinweis: Siehe get_posts() für eine vollständige Liste der $ args Parameter." _ –

0

Sie können usort: http://php.net/usort verwenden. Ich habe versucht, es detaillierter zu machen, wie unten.

function menu_order($a, $b) 
{ 
    return strcmp($a->menu_order, $b->menu_order); 
} 

usort($newsortedarray, "menu_order"); 

foreach ($newsortedarray as $array){ 

    // continue.... 

} 
+0

Ziemlich sicher strcmp wird 1, 11, 2 statt 1, 2, 11 – Dragony

+0

sortieren Das hat Spaß gemacht. Was wäre besser zu verwenden statt strcmp? –

+0

@DavidCassidy Sie können auch versuchen, strcasecmp - Binary Safe Groß-und Kleinschreibung Vergleich zwischen Groß- und Kleinschreibung, wenn Sie Groß-und Kleinschreibung nicht beachten. Für mehr: http://php.net/manual/en/function.strcasecmp.php Hier ist eine schöne Erklärung für diese beiden Funktionen: http://www.hackingwithphp.com/4/7/15/comarcing-strings –