2017-03-27 28 views
-1

我使用PHP進行編碼並擁有多維數組。我想排序我的數組。最重要的標準是總積分。第二個標準是名稱。按照幾個標準對PHP排序數組

換句話說,陣列應該被排序這種方式:

第一通過[信息] [總],通過[信息] [名稱]降序

第二,上行

Array (
    [183] => Array (
    [3] => Array (
     [1] => Array() 
    ) 

    [1] => Array (
     [8] => Array() 
    ) 

    [info] => Array (
     [name] => Doe John /* 2nd criteria */ 
     [total] => 4800 /* 1st criteria */ 
    ) 
) 

    [380] => Array (
    [4] => Array (
     [6] => Array() 
    ) 

    [info] => Array (
     [name] => Davis Ben /* 2nd criteria */ 
     [total] => 14500 /* 1st criteria */ 
    ) 

    [2] => Array (
     [5] => Array() 
    ) 
) 
) 

所以,結果應該是這樣的:

Array (
    [380] => Array (
    [4] => Array (
     [6] => Array() 
    ) 

    [info] => Array (
     [name] => Davis Ben 
     [total] => 14500 
    ) 

    [2] => Array (
     [5] => Array() 
    ) 
) 

    [183] => Array (
    [3] => Array (
     [1] => Array() 
    ) 

    [1] => Array (
     [8] => Array() 
    ) 

    [info] => Array (
     [name] => Doe John 
     [total] => 4800 
    ) 
) 
) 

我已經試過這樣:

foreach ($array as &$item) 
{ 
    uasort($item, function ($a, $b) 
    { 
    if ($a['total'] == $b['total'] 
    { 
     return $b['name'] - $a['name']; 
    } 
    else 
    { 
     return $b['total'] - $a['total']; 
    } 
    }); 
} 

我也嘗試過這一點,但它並不能幫助:

foreach ($array as &$item) 
{ 
    uasort($item, function ($a, $b) 
    { 
    if ($a['info']['total'] == $b['info']['total']) 
    { 
     return $b['info']['name'] - $a['info']['name']; 
    } 
    else 
    { 
     return $b['info']['total'] - $a['info']['total']; 
    } 
    }); 
} 
+2

* 「我用PHP編碼」 * - 你能證明呢?我只能看到'var_dump()'的一些輸出,以及有人爲你寫代碼的無聲請求。 – axiac

+0

你似乎有很多空陣列,你爲什麼不過濾它們?然後你可以用'usort()'http://php.net/manual/en/function.usort.php和你自己的回調函數按照這些標準進行排序。 – Qirel

+0

@axiac我已經用PHP完成了這個數組,並且從MySQL數據庫中插入了數據,但我無法對數組進行排序。有空陣列,因爲這只是一個例子。 – xms

回答

0

你的問題(ORDER BY定製的標準值,保持鍵和值之間的關聯)的要求完美的描述匹配PHP函數uasort()

的代碼是這樣的:

$input = Array(
    '183' => Array(
     '3' => Array(
      '1' => Array(), 
     ), 
     '1' => Array(
      '8' => Array(), 
     ), 
     'info' => Array(
      'name' => 'Doe John',  /* 2nd criteria */ 
      'total' => 4800,   /* 1st criteria */ 
     ), 
    ), 
    '380' => Array(
     '4' => Array(
      '6' => Array(), 
     ), 
     'info' => Array(
      'name' => 'Davis Ben',  /* 2nd criteria */ 
      'total' => 14500,   /* 1st criteria */ 
     ), 
     '2' => Array(
      '5' => Array(), 
     ), 
    ), 
); 

uasort($input, function (array $a, array $b) { 
    // compare using the 1st criterion 
    if ($a['info']['total'] != $b['info']['total']) { 
     return $b['info']['total'] - $a['info']['total'];  // < 0 when $a > $b (descending) 
    } 

    // equality on the 1st criterion, use the 2nd one 
    return strcmp($a['info']['name'], $b['info']['name']);  // < 0 when $a < $b (ascending) 
}); 
+0

是的,謝謝axiac。我只是注意到我在沒有任何理由的情況下使用了foreach。我把它拿走了。現在代碼看起來就像你的:) – xms