如何按照我定义的特定顺序订购数组?

时间:2015-09-01 14:27:41

标签: php arrays multidimensional-array associative-array

我想按照我定义的特定顺序排序数组。

我已经开始构建一个函数来订购这些数组,但是我被卡住了,我不知道如何解决它。

我目前的代码:

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

由于我坚持使用上面的当前代码,我将尝试隔离并简化我的问题并向您展示。

所以作为一个简单的例子,我有一个像这样的数组:

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

现在我想定义该数组的顺序,例如第一个键F,然后D等等......如何更改上面的代码以使其按照我的意愿运行?或者我如何在这里订购这个示例数组?

这里要提到的另一个转折点是,顺序可能包含比数组本身更多的元素。 E.g。

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

1 个答案:

答案 0 :(得分: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
)