2017-09-04 56 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