搜尋

首頁  >  問答  >  主體

使用列值分組2D數組數據,產生3D數組

<p>我有一個多維數組,想要根據特定列中的值進行分組。 </p> <p>我想要依照<code>level</code>分組,但事先不知道level的值。所以,我不能像在<code>for</code>循環中說<code>while $i < 7</code>,因為我不知道<code>7</code>是level鍵的最大值,而且即使我知道也不確定我是否需要這樣做。 </p> <pre class="brush:php;toolbar:false;">[ ['cust' => 'XT8900', 'type' => 'standard', 'level' => 1], ['cust' => 'XT8944', 'type' => 'standard', 'level' => 1], ['cust' => 'XT8922', 'type' => 'premier', 'level' => 3], ['cust' => 'XT8816', 'type' => 'permier', 'level' => 3], ['cust' => 'XT7434', 'type' => 'standard', 'level' => 7], ]</pre> <p>期望的結果:</p> <pre class="brush:php;toolbar:false;">Array ( [1] => Array ( [0] => Array ( [cust] => XT8900 [type] => standard ) [1] => Array ( [cust] => XT8944 [type] => standard ) ) [3] => Array ( [2] => Array ( [cust] => XT8922 [type] => premier ) [3] => Array ( [cust] => XT8816 [type] => permier ) ) [7] => Array ( [4] => Array ( [cust] => XT7434 [type] => standard ) ) )</pre> <p><br /></p>
P粉022140576P粉022140576521 天前605

全部回覆(2)我來回復

  • P粉132730839

    P粉1327308392023-08-23 17:06:46

    最好的方法是,如果您對建立初始數組有控制權,那麼在新增條目時,只需一開始就設定好。

    如果沒有控制權,則建立一個臨時數組進行排序:

    foreach ($input_arr as $key => &$entry) {
        $level_arr[$entry['level']][$key] = $entry;
    }

    這樣可以得到您想要的形式,並且所有引用都在一起。

    如果可能的話,一開始就像這樣建立陣列。

    回覆
    0
  • P粉998100648

    P粉9981006482023-08-23 15:20:11

    首先,你需要依照等級對它們進行分組

    使用foreach循環遍歷數組,檢查等級是否與前一個項目相同,然後將其與該數組分組

    $templevel=0;   
    
      $newkey=0;
    
      $grouparr[$templevel]="";
    
      foreach ($items as $key => $val) {
       if ($templevel==$val['level']){
         $grouparr[$templevel][$newkey]=$val;
       } else {
         $grouparr[$val['level']][$newkey]=$val;
       }
         $newkey++;       
      }
    print($grouparr);

    print($grouparr);的輸出將以你希望的格式顯示

    你也可以嘗試

    print($grouparr[7]);

    將顯示

    [7] => Array (
          [4] => Array (
                 [cust] => XT7434
                 [type] => standard
                 )
          )

    print($grouparr[3]);

    將顯示

    [3] => Array (
          [2] => Array (
                 [cust] => XT8922
                 [type] => premier
                 )
    
          [3] => Array (
                 [cust] => XT8816
                 [type] => permier
                 )
          )

    回覆
    0
  • 取消回覆