2017-09-04 36 views
0

一個條目我有一個PHP數組ASORT PHP陣列,並保持在頂部

我想按字母順序排序,並保持在頂部有一個精確的條目:

$arr = array ("Orange", "Banana", "Strawberry", "Apple", "Pear"); 
asort($arr); 

現在,這將輸出:

Apple, Banana, Orange, Pear, Strawberry 

我希望它保持橙色作爲第一項,然後重新安排其他:

Orange, Apple, Banana, Pear, Strawberry 

謝謝。未知orange位置

$arr = array ("Orange", "Banana", "Strawberry", "Apple", "Pear"); 

$first = array_shift($arr); 
asort($arr); 
array_unshift($arr, $first); 

更新:

+1

重新排序第一,然後將頂部的條目。 – Federkun

+1

@Federkun重新排序後應該如何理解哪個值應該是第一個? –

回答

1

獲取從數組第一個元素,然後將其返回

$arr = array ("Banana", "Orange", "Strawberry", "Apple", "Pear"); 
// $k is index of "Orange" in array 
$k = array_search('Orange', $arr); 
// store element with founded $k in a variable 
$orange = $arr[$k]; 
// remove $k element from $arr 
// same as `unset($arr[$k]);` 
array_splice($arr, $k, 1); 
// sort 
asort($arr); 
// add element in the beginning 
array_unshift($arr, $orange); 
+0

如果Orange在默認情況下不是第一次輸入之前該怎麼辦? – medk

+1

請參閱更新。 –

4

可以在一個元素通過使用自定義功能,以保持在頂部和uasort

$keep = 'Orange'; 

uasort($arr, function ($lhs, $rhs) use ($keep) { 
    if ($lhs === $keep) return -1; 
    if ($rhs === $keep) return 1; 

    return $lhs <=> $rhs; 
}); 

應該沒關係在哪裏橙色在陣列中,它會找到前面的路。

編輯:請注意,該<=>運營商需要PHP 7.您可以到strcmp呼叫更換,如果您使用5