2015-09-01 49 views
0

我想按照我定義的特定順序排列數組。我怎樣才能以特定的順序排列我定義的數組?

我已經開始構建一個函數來訂購這些數組,但是我卡住了,我不知道如何解決它。

我當前的代碼:

public function order_spells($champions) { 

    foreach(array_keys($champions) as $champion){ 

     if(isset($champions[$champion]['Passive']) || isset($champions[$champion]['Q']) || isset($champions[$champion]['W']) || isset($champions[$champion]['E']) || isset($champions[$champion]['R'])) { 

      foreach(array_keys($champions[$champion]) as $Spell_Icon) { 

       if($Spell_Icon!='General'){ 
        //echo $Spell_Icon; 
       } 

      } 

     } 

    } 

} 

這是當前數組:

enter image description here

這是預期輸出:

enter image description here

由於我堅持我當前的代碼ab奧夫,我會盡量隔離和簡化我的問題,並展示給你。

因此,作爲一個簡單的例子我有一個這樣的陣列:

$champions = [ 
    "A" => 1, 
    "C" => 2, 
    "F" => 3, 
    "B" => 4, 
    "G" => 5, 
    "D" => 6, 
    "E" => 7, 
]; 

現在我想要定義該陣列,例如順序第一個鍵F,然後D依此類推......如何更改我的上述代碼以使其按照我的要求工作?或者我如何在這裏訂購這個示例數組?

這裏要提到的另一個轉折是,順序可能比數組本身具有更多的元素。例如。

Order: C,D,A,B 
Array: A,B,C 
+0

這是很好,你有特權張貼鏈接和圖像。但請在您的問題中發佈代碼/輸出。同時向我們展示一些努力/嘗試,以及您如何嘗試解決問題。 – Rizier123

+0

從哪裏得到這個數組?你如何創建它? –

+0

我已經添加了你們要求的代碼,通常當我這樣做的時候,人們會指出代碼中的小錯誤,指向我解決真正問題的方法 – Higeath

回答

3

剛剛流行過你的數組的最後一個元素與array_pop(),並再次把它放在陣列,例如開始

$arr = array_pop($champion["Ashe"]); 
$champion["Ashe"] = ["E" => $arr] + $champion["Ashe"]; 

編輯:

由於從要通過特定的順序您的陣列排序的評論,但你不知道哪些元素是真正的數組中,哪些不是。所以這應該適合你:

所以基本上首先你要定義一個數組的順序。然後你array_combine()陣列與另一個陣列,你用空值填滿array_fill()

意味着你最終會得到這個數組,其中的順序是鍵,所有的數組都有空值作爲值,例如,

Array (
    [F] => Array () 
    [A] => Array () 
    [B] => Array () 
    [G] => Array ()  
    [C] => Array () 
    [E] => Array () 
    [D] => Array () 
) 

然後你可以使用這個數組array_replace()只要你想它訂購的陣列。最後,您可以用array_filter()過濾空的陣列。

代碼:

<?php 

    $arr = [ 
     "A" => 1, 
     "C" => 2, 
     "F" => 3, 
     "B" => 4, 
     "G" => 5, 
     "D" => 6, 
     "E" => 7, 
    ]; 


    $order = ["F", "A", "B", "G", "C", "E", "D"]; 
    $order = array_combine($order, array_fill(0, count($order), [])); 

    $arr = array_filter(array_replace($order, $arr)); 
    print_r($arr); 

?> 

輸出:

Array 
(
    [F] => 3 
    [A] => 1 
    [B] => 4 
    [G] => 5 
    [C] => 2 
    [E] => 7 
    [D] => 6 
) 
+0

@ Rizer123最後一件事是否有目標這個數組,而不是最後一個數組?由於可能有更多,我使用的代碼來訂購這個數組,所以如果我有例如EQW我可以將它重新排序QWE – Higeath

+0

@Higeath我認爲這樣的東西應該適合你:'$ champion [「Ashe」] = array_replace(array_flip($ order),$ champion [「Ashe」]);',where, '$ order'是按鍵順序的順序,例如'$ order = [「Q」,「W」,「E」];'< - 這是否做你想要的? – Rizier123

+0

@ Rizer123我在這個問題中增加了新的順序功能,所以我有多個冠軍,被動QWER的順序不同,所以我將數字分配給臨時數組,假設我們有WQR,被動方式是1 Q 2 W 3 E 4 R 5,會是3 2 5然後我使用排序功能,所以它會被改爲2 3 5,然後我再次與foreach循環與開關,如果它是2它會改變任何原始數組在該領域Q然後E然後R – Higeath

相關問題