簡體   English   中英

Php排序多維數組?

[英]Php sorting multidimensional array?

如何對以下數組進行排序?

我有一個多維數組,每個品牌的總小時數

$totalHours = array(
                'brand'   => array(),
                'project' => array(),
                'hours'   => array()
            );

輸出是這樣的(項目未填充):

array(3) {
  ["brand"]=>
  array(3) {
    [0]=>
    string(4) "Nike"
    [1]=>
    string(9) "Coke Cola"
    [2]=>
    string(8) "Converse"
  }
  ["project"]=>
  array(3) {
    [0]=>
    string(6) "Bonobo"
    [1]=>
    string(4) "LDRU"
    [2]=>
    string(2) "US"
  }
  ["hours"]=>
  array(3) {
    [0]=>
    int(28)
    [1]=>
    int(106)
    [2]=>
    string(1) "2"
  }
}

現在我想根據“小時”字段對數組進行排序。

我已經嘗試過array_multisort,但似乎我根本不知道這個函數是如何工作的,以及如何將它應用於這個數組。 我只能用一行值對單個數組進行排序。 如果我將此問題應用於此問題,我只對小時字段進行排序,使其他字段保持未排序狀態,因此數組已損壞。

“project”確實包含一個字符串。 它總是這樣。 在這個例子中,我沒有填寫它。

array_multisort應該工作:

$totalHours = array(
  'brand' => array('Nike', 'Coke Cola', 'Converse'),
  'project' => array(),
  'hours' => array(28, 106, '2')
);

array_multisort($totalHours['hours'], $totalHours['brand']);

var_dump($totalHours);

這種數據格式不是很方便,因為品牌和時間之間沒有直接關聯,它們甚至坐在不同的陣列中! 另外,最后一小時是一個字符串,而不是整數。

我們將不得不創建一個中間數組來關聯它們並對它們進行排序。 然后我們將重新注入原始數組中的所有內容。

// Make sure both arrays of brands and hours and the same size
if (count($totalHours['brand']) != count($totalHours['hours'])) {
    throw new Exception('Invalid data!');
}

// Make sure every hour record is an integer, not a string
$totalHours['hours'] = array_map('intval', $totalHours['hours']);

// array_combine will sort all arrays based on the sorting of the first one
array_multisort($totalHours['hours'], $totalHours['brand'], $totalHours['project']);

編輯:最初使用array_multisort是@delprks的想法。 在這里,我將其應用於品牌項目陣列。

你不能用一個array_ *函數來做到這一點!

如果(項目沒有填寫)總是和品牌小時的索引相等,那么你可以這樣做:

$forsort = array_combine($totalHours["brands"],$totalHours["hours"]);
asort($forsort,SORT_NUMERIC);
$totalHours["brands"]=array_keys($forsort);
$totalHours["hours"]=array_values($forsort);

但是,這只是你問題的答案,而不是最佳實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM