簡體   English   中英

多維數組-排序索引值鍵

[英]Multidimensional Array - sort index value keys

您將如何對多維數組索引進行排序?

我有這個數組結構

Array
(
    [Amie] => Array
        (
            [0] => Amie
            [1] => 10
            [3] => 10.9%
            [4] => 0.0
            [5] => 14.3
            [6] => 2.4
            [7] => 1510.4
            [8] => 209.7
            [9] => 0
            [10] => 0.0
            [11] => 0
            [12] => 0.0
            [13] => 0.0
            [14] => 0.0%
            [15] => 6
            [17] => 100.0%
            [18] => 0.0%
            [2] => 1
        )

    [Darren D] => Array
        (
            [0] => Darren D
            [1] => 20
            [3] => 3.6%
            [4] => 0.5
            [5] => 0.0
            [6] => 0.0
            [7] => 2148.6
            [8] => 193.6
            [9] => 0
            [10] => 0.0
            [11] => 27418.4
            [12] => 6854.6
            [13] => 2.0
            [14] => 2.8%
            [16] => 2
            [17] => 0.0%
            [18] => 100.0%
            [2] => 0
        )
}

索引2在每個數組的最后一個位置。 這是最后一個,因為我在處理數組的末尾附加了值並分配了索引鍵2。

使用以下命令創建數組:

    foreach($combinedArray as $agent) {
        // @Debug
        // echo 'AGENTS'.'<pre>'; print_r($agents); echo '</pre>'; 
        if(!isset($agents[$agent[0]])) {
            //Never met the agent, add them.
            $agents[$agent[0]] = $agent;
        } else {
            //We already seen the agent, do maths.
            $agents[$agent[0]][1] += $agent[1];
            if(isset($agent[2]) && isset($agents[$agent[0]][2])) {
                $agents[$agent[0]][2] += $agent[2];
            } else if(isset($agent[2])) {
                $agents[$agent[0]][2] = $agent[2];
            }  
            $agents[$agent[0]][7] += $agent[7];
            $agents[$agent[0]][9] += $agent[9];
            $agents[$agent[0]][11]+= $agent[11];
        }

    }  

然后,如果仍然缺少索引2,則將整個數組傳遞給使用

 $newArray = $this->missingKeyValueFiller($agents);

 private function missingKeyValueFiller($array) {
        foreach ($array as $key => $value) {
            if(!isset($value[2])) {
                $array[$key][2] = 0;
            }
        }
        return $array; 
 }

這樣可以確保end數組始終具有內部帶有某些值的索引2。

我試過使用ksort()asort()multisort()但索引2仍顯示在末尾。

排序功能接受sort_flags: http ://php.net/manual/en/function.sort.php

通過SORT_NATURAL作為排序模式:

ksort($array, SORT_NATURAL);

以下代碼:

   <?php

$array = [
    [
      1 => 'a',
      3 => 'b',
      20 => 'c',
      2 => 'd',
    ],
    [
      1 => 'a',
      3 => 'b',
      20 => 'c',
      2 => 'd',
    ],

];

foreach ($array as &$subarray) {
  ksort($subarray, SORT_NATURAL);
}

var_dump($array);

會給你:

array(2) {
  [0]=>
  array(4) {
    [1]=>
    string(1) "a"
    [2]=>
    string(1) "d"
    [3]=>
    string(1) "b"
    [20]=>
    string(1) "c"
  }
  [1]=>
  &array(4) {
    [1]=>
    string(1) "a"
    [2]=>
    string(1) "d"
    [3]=>
    string(1) "b"
    [20]=>
    string(1) "c"
  }
}
<?php $array='yourarray';
array_walk($array,"sorting");
function sorting(&$item,$key){
    ksort($item);
}
print_r($array);
?>

暫無
暫無

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

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