2017-09-04 55 views
2

我有一個多維數組:排序多維數組上升和提名子陣永遠是第一位

$array = array (
    "B" => array ("Banana", "Yello"), 
    "O" => array ("Orange", "Orange"), 
    "A" => array ("Apple", "Green"), 
    "S" => array ("Strawberry", "Red") 
); 

$o = $array['O']; // this is the letter O not zero 
asort($array); 
array_unshift($array, $o); 

現在我想用asort()重新排序數組,但保持「O」爲第一個條目:

O, A, B, S 

這裏的問題是,我得到

O, A, B, O, S 

如何擺脫第二的「O」?

注:我已經問過類似的問題,但有不同的陣列here

回答

2

你只需要unset($array['O']);

<?php 
    $array = array (
    "B" => array ("Banana", "Yello"), 
    "O" => array ("Orange", "Orange"), 
    "A" => array ("Apple", "Green"), 
    "S" => array ("Strawberry", "Red") 
); 

$o = $array['O']; // this is the letter O not zero 
asort($array); 
unset($array['O']); 
array_unshift($array, $o); 
print_r($array); 
?> 

現場演示:https://eval.in/855161

2

試試這個保留數組鍵:

$array = array (
    "B" => array ("Banana", "Yello"), 
    "O" => array ("Orange", "Orange"), 
    "A" => array ("Apple", "Green"), 
    "S" => array ("Strawberry", "Red") 
); 

$key = 'O'; 

asort($array); 
$array = (array_key_exists($key, $array)) ? array($key => $array[$key]) + $array : $array; 

echo '<pre>'; 
print_r($array); 

http://www.phpwin.org/s/ltHbIV

http://php.net/manual/en/language.operators.array.php

信貸編輯以@salathe

+1

這可能僅僅是:'ASORT($陣列); $ array = array(「O」=> $ array [「O」])+ $ array;' – salathe

+0

@salathe,感謝這個漂亮而乾淨的建議。我已經更新了我的答案。 –

2

比調用多種功能是使用這是專做定製鍵排序的一個功能更好。這對於較新的php開發人員來說可能有點困難,但它是正確的工具...

*注意,當粘滯鍵丟失時,此自定義排序不會失敗,因此沒有必要事先檢查密鑰是否存在於數組中。

方法:uksort()PHP<7 no-strcmp() Demo)(PHP<7 strcmp() Demo)(PHP7+ <=> Demo

$array=["B"=>["Banana","Yello"],"O"=>["Orange","Orange"],"A"=>["Apple", "Green"],"S"=>["Strawberry","Red"]]; 

$sticky='O'; 

uksort($array,function($a,$b)use($sticky){ 
    if($a===$sticky) return -1; // prioritize if $a is sticky, regardless of $b 
    if($b===$sticky) return 1; // deprioritize if $b is sticky match 
    /* PHP7+ technique: 
     return $a<=>$b; 
    */ 
    // or one of two PHP<7 techniques: 
    /* 
     if($a===$b) return 0; 
     return $a>$b?1:-1; 
    */ 
    return strcmp($a,$b); 
}); 

var_export($array); 

輸出:

array (
    'O' => 
    array (
    0 => 'Orange', 
    1 => 'Orange', 
), 
    'A' => 
    array (
    0 => 'Apple', 
    1 => 'Green', 
), 
    'B' => 
    array (
    0 => 'Banana', 
    1 => 'Yello', 
), 
    'S' => 
    array (
    0 => 'Strawberry', 
    1 => 'Red', 
), 
)