代码之家  ›  专栏  ›  技术社区  ›  Carlos Salazar

转换数组,用父键php设置每个数组元素

  •  0
  • Carlos Salazar  · 技术社区  · 6 年前

    我正在接收的数据是一个元素数组,它包含一个这样的语言标记数组

    [
      {
        "1": "tag_es1;tag_es2;tag_es3",
        "2": "tag_en1;tag_en2;tag_en3"
      },
      {
        "1": "tag_es1;tag_es2",
        "2": "tag_en1;tag_en2"
      }
    ]
    

    tag 用语言,所以我用 array_map

    [
      {
        "1": [
          "tag_es1",
          "tag_es2",
          "tag_es3"
        ],
        "2": [
          "tag_en1",
          "tag_en2",
          "tag_en3"
        ]
      },
      {
        "1": [
          "tag_es1",
          "tag_es2"
        ],
        "2": [
          "tag_en1",
          "tag_en2"
        ]
      }
    ]
    

    但我需要的是这样的回应

    [
      {
        {
          "1" : "tag_es1",
          "2" : "tag_en1"
        },
        {
          "1" : "tag_es2",
          "2" : "tag_en2"
        },
        {
          "1" : "tag_es3",
          "2" : "tag_en3"
        }
      },
      {
        {
          "1" : "tag_es4",
          "2" : "tag_en4"
        },
        {
          "1" : "tag_es5",
          "2" : "tag_en5"
        }
    
      }
    ]
    

    array_combine array_walk 数组映射 ,但没有成功,我能做什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   u_mulder    6 年前

    具有特殊技巧的解决方案 null 作为对 array_map :

    $arr = json_decode($s, true);
    $new_arr = [];
    
    foreach ($arr as $item) {
        $parts1 = explode(';', $item[1]);
        $parts2 = explode(';', $item[2]);
    
        // $new_arr[] = array_map(null, $parts1, $parts2);
    
        $tmp_arr = array_map(null, $parts1, $parts2);
        $new_arr[] = array_map(
            function($v) { return array_combine(["1","2"], $v); }, 
            $tmp_arr
        );
    }
    
        2
  •  0
  •   Andreas    6 年前

    可以循环数组并构建临时数组。

    $arr = json_decode($json, true);
    foreach($arr as $key1 => $sub){
        foreach($sub as $item){
            $temp[] = explode(";", $item);
        }
        foreach($temp[0] as $key2 => $val){
            $new[$key1][]= array_combine([1,2],array_column($temp, $key2));
        }
        $temp =[]; // empty array
    }
    var_dump($new);
    

    array(2) {
      [0]=>
      array(3) {
        [0]=>
        array(2) {
          [1]=>
          string(7) "tag_es1"
          [2]=>
          string(7) "tag_en1"
        }
        [1]=>
        array(2) {
          [1]=>
          string(7) "tag_es2"
          [2]=>
          string(7) "tag_en2"
        }
        [2]=>
        array(2) {
          [1]=>
          string(7) "tag_es3"
          [2]=>
          string(7) "tag_en3"
        }
      }
      [1]=>
      array(2) {
        [0]=>
        array(2) {
          [1]=>
          string(7) "tag_es1"
          [2]=>
          string(7) "tag_en1"
        }
        [1]=>
        array(2) {
          [1]=>
          string(7) "tag_es2"
          [2]=>
          string(7) "tag_en2"
        }
      }
    }
    

    https://3v4l.org/qgCA1