2017-09-01 30 views
0

我有一個像下面兩個數組:PHP重新安排數組的值,有條件

Array 
(
    [27119] => Array 
     (
      [firstname] => Array 
       (
        [0] => Testfname1 
       ) 

      [lastname] => Array 
       (
        [0] => Testlname1 
       ) 

      [photograph] => Array 
       (
        [0] => 27120 
       ) 

      [priority] => Array 
       (
        [0] => Open 
       ) 

      [primary_location] => Array 
       (
        [0] => 27098 
       ) 

     ) 

    [27137] => Array 
     (
      [firstname] => Array 
       (
        [0] => Testfname2 
       ) 

      [lastname] => Array 
       (
        [0] => Testlname2 
       ) 

      [photograph] => Array 
       (
        [0] => 27138 
       ) 

      [priority] => Array 
       (
        [0] => Featured 
       ) 

      [primary_location] => Array 
       (
        [0] => 27098 
       ) 

     ) 

) 

現在我想基於priority鍵的值的數組以這樣的方式進行排序,如果它的價值是Featured那麼整個元素(包含該對的數組)應該在數組中包含'priority => open'的元素之前(如果沒有其他候選人具有'priority =>特徵')出現。如果它的值是Open那麼它的父數組應該在包含'priority => closed'的父元素之前。所以總結一下,我想用「極度」值和有條件地給定給定的多維數組。

我想過使用usort,但是我無法得到關於如何在那些array_sort函數中設置的初始想法。誰能幫忙?

+0

https://stackoverflow.com/a/17364128/476→「排序爲手動,靜態秩序」 – deceze

+0

@deceze但這不是靜態數據,在這個數組中我會有很多像上面這樣的元素(在我的問題中),爲了簡單和簡短起見,我只給出了兩個元素。至少你可以在評論中首先問我......所以這個問題怎麼樣,這樣的多元素,我怎麼能概括和自動化的過程,而不去「手動」? – VST

+0

據我瞭解你的問題,你有一個決定的命令,在'Closed'之前的'Open'之前對'Featured'進行排序,否? – deceze

回答

1

讓我們假設父數組的名稱爲testArray。然後,使用PHP函數usort與定義比較器的回調函數應該是這樣的:

$sortedArray = usort($testArray, function($left, $right) { 
    if($left['priority'][0] == $right['priority'][0]) { return 0; } 

    if($left['priority'][0] == 'Featured' || ($left['priority'][0] == 'Opened' && $right['priority'][0] == 'Closed')) { return -1; } 
    else { return 1; } 
}); 

試試這個變種

+0

在'$ sortedArray'中它只返回'1',我可以在那個變量中獲得更新的數組嗎? – VST

+0

好了,不用擔心,這對任何數量的子陣都可以普遍使用,對吧? – VST

+0

但是這裏的鍵不被維護,我怎樣才能維護子陣列的鍵(主鍵)(例如[27119])? – VST