2013-05-29 41 views
-1

我有其上active值排序的陣列在末尾;這樣的:如何從數組中刪除一個元件和使用PHP

patient = Array { 

    [0] = Array { 
      active = Y 
      priority = o 
       }, 

    [1] = Array { 
      active = Y 
      priority = P 
       }, 

    [2] = Array { 
      active = Y 
      priority = S 
       }, 

    [3] = Array { 
      active = Y 
      priority = T 
       }, 

    [4] = Array { 
      active = N 
      priority = S 
       } 

      } 

我想利用具有優先級的元素= o並在最後追加,而不會在使用活動元素進行排序時進行更改。輸出應該是這樣的:

patient = Array { 

    [1] = Array { 
      active = Y 
      priority = P 
       }, 

    [2] = Array { 
      active = Y 
      priority = S 
       }, 

    [3] = Array { 
      active = Y 
      priority = T 
       }, 

    [0] = Array { 
      active = Y 
      priority = o 
       }, 

    [4] = Array { 
      active = N 
      priority = S 
       } 

      } 

關鍵的順序並不重要。

+2

'你試過了什麼? – itachi

+2

在你想要的例子中'priority = o'不是最後? – Vector

+0

這是微不足道的。在psuedocode中:'push(arr,shift(arr))' –

回答

1

你需要的是:http://www.php.net/manual/en/function.uasort.php

// Comparison function 
function cmp_priority($a, $b) { 
    if ($a['priority'] == $b['priority']) { 
     return 0; 
    } 
    return $a['priority'] == 'o' ? -1 : 1; 
} 

// Sort and print the resulting array using the comparison function 
uasort($patient, 'cmp_priority'); 
print_r($patient); 
0

你可能想從陣列訴諸優先級隊列,因爲它是該任務進行了優化。 請記住,PQ在所有裝置上都不可用。 http://php.net/manual/en/class.splpriorityqueue.php

$objPQ = new SplPriorityQueue(); 
$objPQ->insert('A',3); 
$objPQ->insert('B',6); 
$objPQ->insert('C',1); 
$objPQ->insert('D',2); 

//mode of extraction 
$objPQ->setExtractFlags(PQtest::EXTR_BOTH); 

//Go to TOP 
$objPQ->top(); 

while($objPQ->valid()){ 
    print_r($objPQ->current()); 
    echo "<BR>"; 
    $objPQ->next(); 
}