2015-09-01 53 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

相关问题