Php 组合两个数组两个一并设置关键点
我已经为此奋斗了很长一段时间。我有两个数组,需要合并 这是我的意见:Php 组合两个数组两个一并设置关键点,php,arrays,Php,Arrays,我已经为此奋斗了很长一段时间。我有两个数组,需要合并 这是我的意见: { "array_one": { "mrnreference": [ { "key_0": "18DK00310020B11A84" }, { "key_0": "18DK00310020B11B40" } ] },
{
"array_one": {
"mrnreference": [
{
"key_0": "18DK00310020B11A84"
},
{
"key_0": "18DK00310020B11B40"
}
]
},
"array_two": {
"shipperreference": [
{
"key_0": "1861575"
},
{
"key_0": "1861549"
}
]
}
}
现在的结构是,每个数组中的每个项都彼此跟随。因此,结果应该是:
{
"result": [
{
"mrn" : "18DK00310020B11A84",
"shipper" : "1861575"
},
{
"mrn" : "18DK00310020B11B40",
"shipper" : "1861549"
}
]
}
然而,我根本不知道如何做到这一点
我已尝试合并两个原始阵列:
//Input
$array_one = $request->array_one;
$array_two = $request->array_two;
//Merge the two received arrays
$final = array_merge_recursive($array_one, $array_two);
但是,这只是删除了array\u one
和array\u two
,但该数组仍然被拆分
如何组合上述数组,使其具有以下格式:
{
"mrn" : "18DK00310020B11B40",
"shipper" : "1861549"
}
您可以使用一些自定义代码执行此操作:
$array_one = $request->array_one;
$array_two = $request->array_two;
$final = array_map(function ($value, $key) use ($array_two) {
foreach ($value as $k => $v) {
return [
"mrn" => $v,
"shipper" => array_get($array_two, "shipperreference.$key.$k")
];
}
}, array_get($array_one, 'mrnreference'), array_keys(array_get($array_one, 'mrnreference')));
一个非常快速的解决方案就是迭代for循环
for($i = 0; $i < count($array_one); $i++){
$final[$i]["mrn"] = $array_one["mrnreference"][$i]; // Mrn key equals array one value
$final[$i]["shipping"] = $array_two["shipperreference"][$i]; // Shipping key equals array two value
}
for($i=0;$i
但是,这有一个小警告,即如果$array_one和$array_two的大小不同,则可能会导致错误 首先,可以使用数组映射来获取值,然后在简单for循环中可以将它们组合起来。请注意,mrnreference和shipperreference的大小必须相同,否则会弹出通知
$json = '
{
"array_one": {
"mrnreference": [
{
"key_0": "18DK00310020B11A84"
},
{
"key_0": "18DK00310020B11B40"
}
]
},
"array_two": {
"shipperreference": [
{
"key_0": "1861575"
},
{
"key_0": "1861549"
}
]
}
}
';
$arr = json_decode($json, true);
$ref = array_map(function($e){return $e['key_0'];}, $arr['array_one']['mrnreference']);
$ship = array_map(function($e){return $e['key_0'];}, $arr['array_two']['shipperreference']);
$output = array();
for ($i = 0, $cnt = count($ref); $i < $cnt ; ++$i) {
$output[] = [
'mrn' => $ref[$i],
'shipper' => $ship[$i],
];
}
echo json_encode(['result' => $output]);
$json=”
{
“数组_one”:{
“mrn参考”:[
{
“0号键”:“18DK00310020B11A84”
},
{
“0号键”:“18DK00310020B11B40”
}
]
},
“数组二”:{
“shipperreference”:[
{
“0号键”:“1861575”
},
{
“0号键”:“1861549”
}
]
}
}
';
$arr=json_decode($json,true);
$ref=array_-map(函数($e){return$e['key_0'];},$arr['array_-one']['mrnreference']);
$ship=array_-map(函数($e){return$e['key_0'];},$arr['array_-two']['shipperference']);
$output=array();
对于($i=0,$cnt=count($ref);$i<$cnt;++$i){
$output[]=[
“mrn”=>$ref[$i],
“发货人”=>$ship[$i],
];
}
echo json_encode(['result'=>$output]);
该特定输出的规则是什么?看起来好像要删除第一个?我想合并每个数组中的每个“值”。因此,它应该迭代两个数组,取两个数组的第一个值,并将它们组合到一个未定义的变量:$data
这会在此行给出错误未定义的偏移量:0“
:`$final[$i]['mrn']=$array\u one[$i][1]`