簡體   English   中英

如何按定義的特定順序對數組進行排序?

[英]How can I order an array in a specific order, which I define?

我想按定義的特定順序對數組進行排序。

我已經開始構建一個函數來對這些數組進行排序,但是我被困住了,不知道如何解決它。

我當前的代碼:

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;
                }

            }

        }

    }

}

這是當前數組:

在此處輸入圖片說明

這是預期的輸出:

在此處輸入圖片說明

由於我堅持上面的當前代碼,因此我將嘗試隔離並簡化我的問題並向您展示。

因此,作為一個簡單的例子,我有一個像這樣的數組:

$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

只需使用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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM