【问题标题】:Combine two array matching key in PHP在PHP中组合两个数组匹配键
【发布时间】:2019-04-08 10:53:09
【问题描述】:

我需要在PHP中合并两个数组,并且还必须匹配键

这是我的数组

array1 的样子

[
    0 => "num",
    1 => "No",
    2 => "Name",
    3 => "Phone",
    4 => "Price",
    5 => "Date"
]

array2 的样子

[
    0 =>[
        "No" => "FR201605832",
        "Price" => 199.0,
        "Date" => "2016-09-01",
        "num" => "19",
        "Name" => "Tom",
        "Phone" => "0900123456"
    ],
    1 =>[
        "No" => "EC2016010100001",
        "Price" => 1680.0,
        "Date" => "2016-09-01",
        "num" => "1680",
        "Name" => "Ted",
        "Phone" => "0900321654"
    ]
]

这是我想要的结果

[
    0 =>[
        "num" => "19",
        "No" => "FR201605832",
        "Name" => "Tom",
        "Phone" => "0900123456",
        "Price" => 199.0,
        "Date" => "2016-09-01",
    ],
    1 => [
        "num" => "1680",
        "No" => "EC2016010100001",
        "Name" => "Ted",
        "Phone" => "0900321654",
        "Price" => 1680.0,
        "Date" => "2016-09-01",
    ]
]

array1是User reOrder输入的excel标题,我可以得到reorder request但是不知道怎么和value结合

请帮我合并两个数组并导出期望的结果,谢谢


这是下一步

通过 array3 重命名 Result 数组键

array3 的样子

数组:6 [▼

"num" => "id"

"否" => "ECNo"

“姓名”=>“用户”

“电话”=>“手机”

“价格”=>“总计”

“日期”=>“发薪日”

]

我试过了

foreach($exportdata as &$val){

$val[$values] = $val[$keys];

未设置($val[$value]);

}

但得到错误 Illegal offset type

有什么好主意吗?

【问题讨论】:

  • 您需要按第一个数组对第二个数组进行排序(排序)??
  • @Hamelraj 是的,就像你说的......
  • 现在检查我的答案,我有另一种方式 Ryan
  • @Hamelraj 你能帮我看看其他方法吗?

标签: php arrays laravel


【解决方案1】:

这样做:

$modified = [];
foreach($parent as $i => $val) {
    foreach($child as $ci => $data) {
        $modified[$ci][$val] = $data[$val];
    }
}
echo "<pre>";print_r($modified);

输出:-https://3v4l.org/amNep

【讨论】:

    【解决方案2】:

    使用array_flip()array_merge() 来实现您的结果

    $new = [];
    foreach ($array as $value) {
      $new[] = array_merge(array_flip($order),$value);
    }
    dd($new);
    

    您可以在创建第二个数组时订购该数组。没有去另一个foreach 所以我猜你的第二个数组数据有些不同所以试试这种方式

    $new = [];
    foreach ($array as $value) {
       if(isset($value['num'])) $data['num'] = $value['num'];
       if(isset($value['No'])) $data['No'] = $value['No'];
       if(isset($value['Name'])) $data['Name'] = $value['Name'];
       if(isset($value['Phone'])) $data['Phone'] = $value['Phone'];
       if(isset($value['Price'])) $data['Price'] = $value['Price'];
       if(isset($value['Date'])) $data['Date'] = $value['Date'];
    
       $new[] = $data;
    }
    

    【讨论】:

    • 直接$new[] = array_merge(array_flip($order),$value);。不需要额外的变量$route_list。它会使答案更有效
    • @AlivetoDie 也谢谢你~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多