2015-03-04 2 views
0

Je sais que des questions similaires à cela ont été posées, mais même en les regardant toutes, je n'arrive pas à faire fonctionner ça. Je pense que c'est un peu plus complexe que les autres exemples que je trouve. Je sais que quelqu'un va dire que c'est une question à répétition - mais j'ai essayé très fort de l'obtenir à partir des exemples que j'ai vus jusqu'à présent - désolé d'avance! Donc, étant donné ce tableau multidimensionnel $ results_display en PHP (var_dump ci-dessous), il y a 5 membres du sous-tableau "#results", et je veux trier (descendant) ces 5 par la valeur dans le "#changed" " chaîne.Tri d'un sous-tableau dans un tableau multidimensionnel en PHP

Est-ce que quelqu'un peut aider une fille qui s'est cognée la tête contre son bureau pendant quelques jours?

Merci beaucoup! Ce que j'ai essayé est ci-dessous le var_dump.

J'ai commenté la partie avec le titre pour essayer de faire fonctionner la première partie.

$results_display = 
array(8) { 
    ["#theme"]=> string(18) "hs_filters_results" 
    ["#title"]=> string(18) "On-Demand Webinars" 
    ["#body"]=> NULL 
    ["#results"]=> array(5) { 
    [0]=> array(3) {  
    ["#changed"]=> string(10) "1403279484" 
    ["#theme"]=> string(17) "hs_filters_result" 
    ["#result"]=> array(25) { 
     ["#nid"]=> string(4) "2057" 
     ["#node_type"]=> array(2) { 
      ["machine_name"]=> string(7) "webinar" 
      ["name"]=> string(7) "Webinar" } 
     ["#title"]=> string(61) "7 Critical Reasons to Automate Handling of IBM i Spool Files " 
     ["#brand_nid"]=> string(2) "29" 
     ["#brand_machine_name"]=> string(5) "brand" 
     ... } 
    } 
... 

}

// Obtain a list of columns for the results array 
foreach ($results_display as $key => $row) { 
    $changed[$key] = $row['changed']; 
    //$title[$key] = $row['title']; 
} 

// Sort the data with date changed descending, title ascending 
// Add $results_display as the last parameter, to sort by the common key 
//array_multisort($changed, SORT_DESC, $title, SORT_ASC, $results_display); 
array_multisort($changed, SORT_DESC, $results_display); 
+0

utilisez 'usort', et où sont les codes sur lesquels vous travaillez – Ghost

+0

Et pour ajouter un autre pli à cela, je voudrais aussi trier par la chaîne #title (ascendant) dans le sous-groupe #result du tableau #results. Donc, d'abord trier par la date modifiée, mais si deux des résultats ont la même date modifiée, les trier par le titre. – Pamela

+0

J'ai également essayé un uasort comme ceci: – Pamela

Répondre

0
usort($results_display['results'], function ($a, $b) { 
    return $a['changed'] - $b['changed']; 
}); 

Cela devrait vous aider à démarrer. Pour plus d'options de tri possibles, voir https://stackoverflow.com/a/17364128/476.

+0

Merci pour votre aide deceze! Je vais regarder votre référence ci-dessus ... mais j'ai essayé ce code usort, et juste eu l'erreur: "Attention: usort() attend paramètre 1 à être tableau, null donné dans .. Cela n'a pas beaucoup de sens, car $ results_display est clairement un tableau – Pamela

+0

Eh bien, cela signifie que $ results_display ['results'] 'n'est pas le tableau que vous cherchez, peut-être en effet' $ results_display ['#results'] '? – deceze