将多个多维数组合并为一个多维数组

数组1:

$arr1=array(
    array(
        'id'=>1,
        'name'=>'国际新闻'
    ),
    array(
        'id'=>2,
        'name'=>'国内新闻'
    )
);

数组2:

$arr2=array(
    array(
        'id'=>1,
        'name'=>'国际娱乐新闻',
        'tid'=>1
    ),
    array(
        'id'=>2,
        'name'=>'国际体育新闻',
        'tid'=>1
    ),
    array(
        'id'=>3,
        'name'=>'国际时政新闻',
        'tid'=>1
    ),
    array(
        'id'=>4,
        'name'=>'国内娱乐新闻',
        'tid'=>2
    ),
    array(
        'id'=>5,
        'name'=>'国内体育新闻',
        'tid'=>2
    )
);

数组3:

$arr3=array(
    array(
        'id'=>1,
        'title'=>'超甜!英国小哥霉霉演唱会上向女友求婚',
        'ptime'=>'1530235016',
        'cid'=>1
    ),
    array(
        'id'=>2,
        'title'=>'英格兰丢单刀获第2 比利时全胜将战日本',
        'ptime'=>'1530235177',
        'cid'=>2
    ),
    array(
        'id'=>3,
        'title'=>'环球时报社评:美要世界不买伊朗石油 中国怎么办',
        'ptime'=>'1530235270',
        'cid'=>3
    ),
    array(
        'id'=>4,
        'title'=>'陈奕迅赴俄罗斯观看世界杯',
        'ptime'=>'1530235474',
        'cid'=>4
    ),
    array(
        'id'=>5,
        'title'=>'姚明在场下目睹这一幕:中国内线竟被韩国打爆',
        'ptime'=>'1530235548',
        'cid'=>5
    ),
    array(
        'id'=>6,
        'title'=>'2018年世界杯,荷兰、意大利未进入32强',
        'ptime'=>'1530261159',
        'cid'=>2
    ),
    array(
        'id'=>7,
        'title'=>'倪妮baby牵手荡秋千画面文艺唯美 两人灿笑开心的像个孩子',
        'ptime'=>'1530414358',
        'cid'=>4
    )
);

合并方法:

foreach ($arr1 as &$val01) {  //在遍历数组1的同时添加'cates'=>array()元素
    foreach ($arr2 as $val02) {
        if($val01['id']==$val02['tid']){
            $val01['cates'][]=$val02;
        }
    }

    //在已按类整合进数组1的'cates'元素下的数组2中添加'arts'=>array()元素
    foreach ($val01['cates'] as &$val03) {  
        foreach ($arr3 as $val04) {
            if($val03['id']==$val04['cid']){
                $val03['arts'][]=$val04;
            }
        }
    }
}

echo "<pre>";
var_dump($arr1);
echo "</pre>";

显示结果为:

array(2) {
  [0]=>
  array(3) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(12) "国际新闻"
    ["cates"]=>
    array(3) {
      [0]=>
      array(4) {
        ["id"]=>
        int(1)
        ["name"]=>
        string(18) "国际娱乐新闻"
        ["tid"]=>
        int(1)
        ["arts"]=>
        array(1) {
          [0]=>
          array(4) {
            ["id"]=>
            int(1)
            ["title"]=>
            string(54) "超甜!英国小哥霉霉演唱会上向女友求婚"
            ["ptime"]=>
            string(10) "1530235016"
            ["cid"]=>
            int(1)
          }
        }
      }
      [1]=>
      array(4) {
        ["id"]=>
        int(2)
        ["name"]=>
        string(18) "国际体育新闻"
        ["tid"]=>
        int(1)
        ["arts"]=>
        array(2) {
          [0]=>
          array(4) {
            ["id"]=>
            int(2)
            ["title"]=>
            string(53) "英格兰丢单刀获第2 比利时全胜将战日本"
            ["ptime"]=>
            string(10) "1530235177"
            ["cid"]=>
            int(2)
          }
          [1]=>
          array(4) {
            ["id"]=>
            int(6)
            ["title"]=>
            string(51) "2018年世界杯,荷兰、意大利未进入32强"
            ["ptime"]=>
            string(10) "1530261159"
            ["cid"]=>
            int(2)
          }
        }
      }
      [2]=>
      array(4) {
        ["id"]=>
        int(3)
        ["name"]=>
        string(18) "国际时政新闻"
        ["tid"]=>
        int(1)
        ["arts"]=>
        array(1) {
          [0]=>
          array(4) {
            ["id"]=>
            int(3)
            ["title"]=>
            string(65) "环球时报社评:美要世界不买伊朗石油 中国怎么办"
            ["ptime"]=>
            string(10) "1530235270"
            ["cid"]=>
            int(3)
          }
        }
      }
    }
  }
  [1]=>
  &array(3) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(12) "国内新闻"
    ["cates"]=>
    array(2) {
      [0]=>
      array(4) {
        ["id"]=>
        int(4)
        ["name"]=>
        string(18) "国内娱乐新闻"
        ["tid"]=>
        int(2)
        ["arts"]=>
        array(2) {
          [0]=>
          array(4) {
            ["id"]=>
            int(4)
            ["title"]=>
            string(36) "陈奕迅赴俄罗斯观看世界杯"
            ["ptime"]=>
            string(10) "1530235474"
            ["cid"]=>
            int(4)
          }
          [1]=>
          array(4) {
            ["id"]=>
            int(7)
            ["title"]=>
            string(77) "倪妮baby牵手荡秋千画面文艺唯美 两人灿笑开心的像个孩子"
            ["ptime"]=>
            string(10) "1530414358"
            ["cid"]=>
            int(4)
          }
        }
      }
      [1]=>
      &array(4) {
        ["id"]=>
        int(5)
        ["name"]=>
        string(18) "国内体育新闻"
        ["tid"]=>
        int(2)
        ["arts"]=>
        array(1) {
          [0]=>
          array(4) {
            ["id"]=>
            int(5)
            ["title"]=>
            string(63) "姚明在场下目睹这一幕:中国内线竟被韩国打爆"
            ["ptime"]=>
            string(10) "1530235548"
            ["cid"]=>
            int(5)
          }
        }
      }
    }
  }
}

猜你喜欢

转载自www.cnblogs.com/zhouwanqiu/p/9385509.html