【PHP】PHP高级数组操作:合并非规范化数组

请以汉语进行转述,只需要提供一个选项:

代码

<?php
$data = [
    ['id'=> 1,'name'=>'イワーク','place'=>'渓谷,洞窟','level' => 10,'technique'=>'岩雪崩'],
    ['id'=> 1,'name'=>'イワーク','place'=>'砂漠,山頂','level' => 20,'technique'=>'岩石砲'],
    ['id'=> 2,'name'=>'ハガネール','place'=>'鉱山,地中','level' => 10,'technique'=>'メテオドライブ'],
    ['id'=> 2,'name'=>'ハガネール','place'=>'丘陵,窪地','level' => 20,'technique'=>'アイアンローラー'],
];
$res = [];
foreach($data as $value){
    if(empty($res[$value['id']])){
        $res[$value['id']] = [
            'id' => $value['id'],
            'name' => $value['name'],
        ];
    }
    foreach(explode(',',$value['place']) as $place){
        $res[$value['id']]['place_list'][] = $place;
    }
    
    $res[$value['id']]['lv_list'][(int)$value['level']] = [
        'level' => $value['level'],
        'technique' => $value['technique'],
    ];
}
var_dump($res);

成果

array(2) {
  [1]=>
  array(4) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(12) "イワーク"
    ["place_list"]=>
    array(4) {
      [0]=>
      string(6) "渓谷"
      [1]=>
      string(6) "洞窟"
      [2]=>
      string(6) "砂漠"
      [3]=>
      string(6) "山頂"
    }
    ["lv_list"]=>
    array(2) {
      [10]=>
      array(2) {
        ["level"]=>
        int(10)
        ["technique"]=>
        string(9) "岩雪崩"
      }
      [20]=>
      array(2) {
        ["level"]=>
        int(20)
        ["technique"]=>
        string(9) "岩石砲"
      }
    }
  }
  [2]=>
  array(4) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(15) "ハガネール"
    ["place_list"]=>
    array(4) {
      [0]=>
      string(6) "鉱山"
      [1]=>
      string(6) "地中"
      [2]=>
      string(6) "丘陵"
      [3]=>
      string(6) "窪地"
    }
    ["lv_list"]=>
    array(2) {
      [10]=>
      array(2) {
        ["level"]=>
        int(10)
        ["technique"]=>
        string(21) "メテオドライブ"
      }
      [20]=>
      array(2) {
        ["level"]=>
        int(20)
        ["technique"]=>
        string(24) "アイアンローラー"
      }
    }
  }
}
广告
将在 10 秒后关闭
bannerAds