函数要求接受两个字符串数组,其中一个视为新数据,另一个视为旧数据,以新数据为优先,把旧数据和新数据合并,并计算每个合并项对应两哥数组的索引位置,合并后的格式为
[
[
'name'=>传入数组的字符串项,
‘new' =>对应在新版本中出现的索引,如果新版本没有此项,填入-1,
‘old’ =>对应在旧版本中出现的索引,如果旧版本没有此项,填入-1
],
.............
]
注:对于重复出现的项,需要按出现的先后去匹配举例:已知:$new = ['id','name','desc','value','value','price'];
$old = ['id','type','value','owner'];
function MergeDaTa($new,$old){ //具体如何实现??
}
上述function如何才能得到以下格式数据
[
[
'name' => 'id',
'new' => 0,
'old' => 0
],[ 'name'=> 'name',
'new' => 1,
'old' => -1
],[ 'name'=> 'desc',
'new' => 2,
'old' => -1
],[ 'name'=> 'value',
'new' => 3,
'old' => 2
],[ 'name'=> 'value',
'new' => 4,
'old' => -1
],[ 'name'=> 'price',
'new' => 5,
'old' => -1
],[ 'name'=> 'type',
'new' => -1,
'old' => 1
],[ 'name'=> 'owner',
'new' => -1,
'old' => 3
]
]
[
[
'name'=>传入数组的字符串项,
‘new' =>对应在新版本中出现的索引,如果新版本没有此项,填入-1,
‘old’ =>对应在旧版本中出现的索引,如果旧版本没有此项,填入-1
],
.............
]
注:对于重复出现的项,需要按出现的先后去匹配举例:已知:$new = ['id','name','desc','value','value','price'];
$old = ['id','type','value','owner'];
function MergeDaTa($new,$old){ //具体如何实现??
}
上述function如何才能得到以下格式数据
[
[
'name' => 'id',
'new' => 0,
'old' => 0
],[ 'name'=> 'name',
'new' => 1,
'old' => -1
],[ 'name'=> 'desc',
'new' => 2,
'old' => -1
],[ 'name'=> 'value',
'new' => 3,
'old' => 2
],[ 'name'=> 'value',
'new' => 4,
'old' => -1
],[ 'name'=> 'price',
'new' => 5,
'old' => -1
],[ 'name'=> 'type',
'new' => -1,
'old' => 1
],[ 'name'=> 'owner',
'new' => -1,
'old' => 3
]
]
<?php
function MergeDaTa(&$new,&$old){
$res = [];
//取差集然后与新数组合并
$total = array_merge($new,array_diff($old,$new)); foreach ($total as $v) {
$tmp['name'] = $v;
$new_key = array_search($v, $new); //返回键值 or FALSE
$old_key = array_search($v, $old); if($new_key!==false){
$tmp['new'] = $new_key; $new[$new_key]='';
}else{
$tmp['new'] = -1;
}
if($old_key!==false){
$tmp['old'] = $old_key; $old[$old_key]='';
}else{
$tmp['old'] = -1;
}
$res[] = $tmp;
}
return $res;
}
$new = ['id','name','desc','value','value','price'];
$old = ['id','type','value','owner'];
echo '<pre>';
print_r(MergeDaTa($new,$old));
* 新旧数据检索
* @param $new array 新数据
* @param $old array 旧数据
* @return:合并后的数组
*/
function MergeDaTa($new,$old){
//处理数组
sort($all_arr = array_filter(array_unique(array_merge($new,$old))));
//合并数据
for($i = 0; $i < count($all_arr);$i ++){
$new_arr[$i]["name"] = $all_arr[$i];
//新数据
if(in_array($all_arr[$i],$new)){
$new_arr[$i]["new"] = array_flip($new)[$all_arr[$i]];//返回该数据位于新数组的位置
} else {
$new_arr[$i]["new"] = "-1";
}
//旧数据
if(in_array($all_arr[$i],$old)){
$new_arr[$i]["old"] = array_flip($old)[$all_arr[$i]];//返回该数据位于新数组的位置
} else {
$new_arr[$i]["old"] = "-1";
}}
return $new_arr;
}//新数据
$new = ["id","name","desc","value","value","price"];
//旧数据
$old = ["id","type","value","owner"];/*
问题:上述问题如何通过 function 才能得到以下格式数据
要求:
-> 合并后的格式为:
[
[
"name"=>传入数组的字符串项,
"new" =>对应在新版本中出现的索引,如果新版本没有此项,填入-1,
"old" =>对应在旧版本中出现的索引,如果旧版本没有此项,填入-1
],
.............
]
示范:
[
[
"name" => "id",
"new" => 0,
"old" => 0
],
[
"name"=> "name",
"new" => 1,
"old" => -1
],
[
"name"=> "desc",
"new" => 2,
"old" => -1
],
[
"name"=> "value",
"new" => 3,
"old" => 2
],
[
"name"=> "value",
"new" => 4,
"old" => -1
],
[
"name"=> "price",
"new" => 5,
"old" => -1
],
[
"name"=> "type",
"new" => -1,
"old" => 1
],
[
"name"=> "owner",
"new" => -1,
"old" => 3
]
]
*/
//var_dump($new);
print_r(MergeDaTa($new,$old));