2015-03-04 5 views
0

Я знаю, что подобные вопросы были заданы, но даже глядя на всех из них, я не могу заставить это работать. Я думаю, что это немного сложнее, чем другие примеры, которые я нахожу. Я знаю, что кто-то собирается сказать, что это повторяющийся вопрос, - но я очень старался получить его из примеров, которые я видел до сих пор, - извините заранее!Сортировка подматрицы в многомерном массиве в PHP

Так что, учитывая этот многомерный массив $ results_display в PHP (var_dump ниже), есть 5 членов подматрицы «#results», и я хочу сортировать (спускать) те 5 по значению в «#changed "строка.

Может кто-то , пожалуйста, помогите девушке, кто стучал головой о ее стол на пару дней?

Большое вам спасибо!

То, что я пробовал, находится ниже var_dump. Я прокомментировал часть с названием, чтобы попытаться получить только первую часть работы.

$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

используйте 'usort', и где находятся те коды, которые вы работаете над – Ghost

+0

И чтобы добавить еще одну морщину к этому, я также хотел бы отсортировать по строке #title (по возрастанию) в подэлементе #result массива #results. Итак, сначала сортируйте по дате изменения, но если два из результатов имеют ту же самую измененную дату, отсортируйте их по названию. – Pamela

+0

Я также пробовал использовать uasort следующим образом: – Pamela

ответ

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

Это должно вам начать работу. Дополнительные возможности сортировки см. В разделе https://stackoverflow.com/a/17364128/476.

+0

Спасибо за помощь, я посмотрю вашу ссылку выше ... но я попробовал этот код usort и только что получил ошибку: «Warning: usort() ожидает, что параметр 1 будет массивом, null указан в .. «Это не имеет большого смысла, потому что $ results_display - это явно массив. – Pamela

+0

Ну, это означает' $ results_display ['results'] 'не тот массив, который вы ищете. Может быть, это действительно' $ results_display [ ''] #results '? – deceze

Смежные вопросы