2013-01-31 34 views
-1

請你能好心幫助,我有以下$事件陣列和我想的排序值到我的事件數組中的「」數組進行排序。不正確使用usort的

Array ([0] => Array ( 
      [date] => 20130329 
      [title] => Run 
      [cats] => Array ( 
      [0] => Array ( 
      [name] => Cause 2 
      [slug] => cause-2 
      [sort] => 1)) 
     ) 

     [1] => Array ( 
      [date] => 20130131 
      [title] => Run2 
      [cats] => Array ( 
      [0] => Array ( 
      [name] => Abused Children 
      [slug] => abused-children 
      [sort] => 2) 
      [1] => Array ( 
      [name] => Animal Welfare 
      [slug] => animal-welfare 
      [sort] => 3) 
      [2] => Array ( 
      [name] => Education 
      [slug] => education 
      [sort] => 1) 
      ) ) 

當我對[cat]進行foreach時,我希望它按排序順序迭代,例如。

Event: Run2 
Cat: Education 
Cat: Abused Children 
Cat: Animal Welfare 

在我的代碼,我有這樣的事情

usort($events, function($a, $b) { 
return $a['cats']['sort'] - $b['cats']['sort']; }); 

foreach($events as $event) { 
    foreach($event['cats'] as $cat) { 
     echo $cat['name'] 
    } 
} 
+1

什麼是你的排序的邏輯是什麼?您的預期結果似乎沒有按字典順序排列。 – Passerby

+1

這是排序在['sort']這是一個數字 – Dale

回答

2

好像你想每一個事件裏面的貓數組進行排序。在這種情況下,請在嵌套循環中移動排序函數:

foreach($events as $event) { 
    usort($event['cats'], function ($a, $b) { 
     return $a['sort'] - $b['sort']; 
    }); 
    foreach($event['cats'] as $cat) { 
     echo $cat['name'] 
    } 
} 
+0

你是這樣的天才!非常感謝。不知道爲什麼我因爲我的問題而被低估了,但你已經幾個小時節省了我的時間,所以我很感激。 – uknowit2

1

好的,我發表評論時有點厭倦。因此,這裏有一個解決方案,在輸出之前將源數組調整爲所需的順序。

$events=array(array("date"=>"20130329","title"=>"Run","cats"=>array(array("name"=>"Cause 2","slug"=>"cause-2","sort"=>1))),array("date"=>"20130131","title"=>"Run2","cats"=>array(array("name"=>"Abused Children","slug"=>"abused-children","sort"=>2),array("name"=>"Animal Welfare","slug"=>"animal-welfare","sort"=>3),array("name"=>"Education","slug"=>"education","sort"=>1)))); 
$events=array_map(function($arr){ 
    usort($arr["cats"],function($a,$b){ 
     return $a["sort"]-$b["sort"]; 
    }); 
    return $arr; 
},$events); 
foreach($events as $event) 
{ 
    echo "Event: ".$event["title"]."\n"; 
    foreach($event["cats"] as $cat) 
    { 
     echo " Cat: ".$cat["name"]."\n"; 
    } 
} 

以上輸出:

Event: Run 
    Cat: Cause 2 
Event: Run2 
    Cat: Education 
    Cat: Abused Children 
    Cat: Animal Welfare 

Live example

+0

非常感謝,也應該這樣做。 – uknowit2