2011-08-31 57 views
0

可能重複:
Sort an array by a child array's value in PHP如何訂購包含數組的數組?

我有以下陣列結構:

$en_array = array(); 

while(...) { 
    $en_array[] = $row; 
} 

$en_array = array (
    array (
     "name" => "a", 
     "followers" => 5, 
     "imageurl" => "http://images.com/img.jpg" 
    ) 

    array (
     "name" => "b", 
     "followers" => 25, 
     "imageurl" => "http://images.com/img.jpg" 
    ) 

    array (
     "name" => "c", 
     "followers" => 15, 
     "imageurl" => "http://images.com/img.jpg" 
    ) 

) 

在這個例子中我想由值命令的鍵連接陣列的追隨者,例如$en_array[0]["followers"]將具有值25

我不完全確定這是否可以完成,但我希望可以。

任何幫助將不勝感激:)!

+0

那麼,我們是由追隨者排序,然後呢? – Matchu

+0

是的,純粹是由追隨者:)。 – Avicinnian

回答

1

由於它看起來像你只有有興趣按照關注者排序,我們可以用PHP的usort很容易地做到這一點。

function compare_by_followers($a, $b) { 
    if($a['followers'] == $b['followers']) return 0; 
    return $a['followers'] > $b['followers'] ? -1 : 1; 
} 

usort($en_array, 'compare_by_followers'); 

排序是,在它的核心,所述陣列的元件相互比較並找出哪些是比其它更大的處理。 usort允許您使用自定義的比較函數這個過程:compare_by_followers($a, $b)返回-1如果$a['followers']是大於$b['followers'](意思是$a應該$b之前去),返回1如果$a['followers']小於$b['followers'](意思是$a應該來$b後)如果相等則返回0

+0

請注意,此答案的第一份草稿將其倒退並按升序排序。如果您正在尋找降序,請使用新的片段。 (唯一的區別是我用''替換了函數中的'<'')。 – Matchu

+0

謝謝,尤其是對於解釋!所以我認爲它逐漸過濾比較每個數組(我不確定'$ a'和'$ b'代表什麼)? – Avicinnian

0

array_multisort()是你所追求的。

foreach ($en_array as $key => $row) { 
    $name[$key] = $row['name']; 
    $followers[$key] = $row['followers']; 
} 

array_multisort($followers,SORT_DESC,$name,SORT_ASC,$en_array); 

在此之後,結果是在降序的追隨者順序,並且其中追隨者名的相同,升序(即字母順序)。