【问题标题】:Convert 2d array by specified 2d format按指定的 2d 格式转换 2d 数组
【发布时间】:2021-08-10 18:17:18
【问题描述】:

我需要将下面的二维数组转换为指定的二维数组格式。数组包含多个父数组和多个子数组。此外,已尝试转换代码,但没有得到预期的输出。

这是我尝试过的代码,

    $a1 = array( 
               '0' =>
                  array(
                   'banner_details' =>
                     array(
                        'id' => 2,
                         'section_id' => 24
                     ),
                     'slide_details' =>
                     array(
                        0 => array(
                            'id' => 74,
                            'name' => 'Ads1' 
                        ),
                        1 => array(
                            'id' => 2,
                            'name' => 'Ads2' 
                        )
                     )
                     
                  ),
                  '1' =>
                  array(
                   'banner_details' =>
                     array(
                        'id' => 106,
                         'section_id' => 92
                     ),
                     'slide_details' =>
                     array(
                        0 => array(
                            'id' => 2001,
                            'name' => 'Adv1' 
                        ),
                        1 => array(
                            'id' => 2002,
                            'name' => 'Adv2' 
                        )
                     )
                     
                  )
               
            );

  $s = [];
for($i = 0; $i<2; $i++) {
    foreach($a1[$i]['slide_details'] as $vs){
        $s[] = $vs;
        
    }
}

我的输出:

     Array
    (
   [0] => Array
     (
      [id] => 74
      [name] => Ads1
     )

  [1] => Array
    (
    [id] => 2
    [name] => Ads2
    )

 [2] => Array
   (
    [id] => 2001
    [name] => Adv1
   )

 [3] => Array
   (
    [id] => 2002
    [name] => Adv2
   )
 )

预期输出:

  Array
  (
  [24] => Array
     (
      [0] => 74
      [1] => 2
     )
 [92] => Array
   (
   [0] => 2001
   [1] => 2002
   )
 ) 

请检查上面的代码并告诉我。

谢谢,

【问题讨论】:

    标签: php arrays multidimensional-array 2d


    【解决方案1】:

    您可以借助isset() 函数应用下一个简单的foreach loop

    foreach($a1 as $data){
        if (isset($data['banner_details']['section_id'])){
            $s[$data['banner_details']['section_id']] = [];
             
            if (isset($data['slide_details'])){
                foreach($data['slide_details'] as $row){
                    $s[$data['banner_details']['section_id']][] = $row['id'];
                }
            }
        }
    }
    

    Demo

    如果您知道 banner_detailsslide_detailssection_id 等索引将始终存在,那么您可以在 if 语句中跳过 isset()

    【讨论】:

      【解决方案2】:

      您可以使用array_column 函数进行简单的解决:

      $result = [];
      
      foreach ($a1 as $item)
      {
          $result[$item['banner_details']['section_id']] = array_column($item['slide_details'], 'id');
      }
      
      var_dump($result);
      

      【讨论】:

        猜你喜欢
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 2020-02-27
        相关资源
        最近更新 更多