php 数组合并的问题 php二维数组merge合并 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果两数组规模一样,次序也一样则$arr2=array( "hdzt_show" => array ( "local_date" => "1420128000", "parent_channel" => "hdzt_show", "channel" => "hdzt_show", "speak_uv" => "39", "speak_amount" => "67" ));$arr=array( "hdzt_show" => array( "local_date" => "1420128000", "parent_channel" => "hdzt_show", "channel" => "hdzt_show", "uv" => "7", "fuv" => "6", "valid_user" => "2", "duration" => "586", "register" =>"0", "third_register" => "0", "pv" => "15" ));$r = array_combine(array_keys($arr), array_map('array_merge', $arr, $arr2));var_export($r);若考虑到两数组可能存在规模上的差异(第一维数量不同、排列次序不同)则foreach($arr as $k=>$v) { if(isset($arr2[$k])) $r[$k] = array_merge($v, $arr2[$k]);}var_export($r);array ( 'hdzt_show' => array ( 'local_date' => '1420128000', 'parent_channel' => 'hdzt_show', 'channel' => 'hdzt_show', 'uv' => '7', 'fuv' => '6', 'valid_user' => '2', 'duration' => '586', 'register' => '0', 'third_register' => '0', 'pv' => '15', 'speak_uv' => '39', 'speak_amount' => '67', ),) 如果重复了你怎么处理? 假设字段重复取最后一个,并且待处理数组都是同样key的二维数组 那么可以这么写function merge_arr($arr,$key1=null){ if(!$key1) $key1= key($arr[0]); $return_arr = array(); foreach($arr as $key=>$val){ foreach($val[$key1] as $k=>$v){ $return_arr[$key1][$k] = $v; } } return $return_arr;}$arr2=array( "hdzt_show" => array ( "local_date" => "1420128000", "parent_channel" => "hdzt_show", "channel" => "hdzt_show", "speak_uv" => "39", "speak_amount" => "67" ));$arr=array( "hdzt_show" => array( "local_date" => "1420128000", "parent_channel" => "hdzt_show", "channel" => "hdzt_show", "uv" => "7", "fuv" => "6", "valid_user" => "2", "duration" => "586", "register" =>"0", "third_register" => "0", "pv" => "15" ));print_r(merge_arr(array($arr2,$arr)));exit;结果如下Array( [hdzt_show] => Array ( [local_date] => 1420128000 [parent_channel] => hdzt_show [channel] => hdzt_show [speak_uv] => 39 [speak_amount] => 67 [uv] => 7 [fuv] => 6 [valid_user] => 2 [duration] => 586 [register] => 0 [third_register] => 0 [pv] => 15 )) 这个可以 换成多个数组合并的话要怎么改呢 参考我的方法 把所有数组打包传进去 说时候 你这个我没看太懂 麻烦给我贴一下吧 还有就是 你这个是俩个foreach 一共有上千条数组需要合并 这样的话会不会很慢呢? 你可以用xu大的方法 把数组都传进去就可以了我这两个foreach效率不会有什么特别慢 因为原理是一样的 第一层foreach就是吧你这个1000多个数组依次处理 里边一层foreach是每个数组具体的处理 基本思路就是每一个新的key就压入结果数组 老的key就替换对应值 最终的数组有所有的key 并且每个key只有一个值 多个数组是怎么回事(想当然的?)如果真的是有桑前的数组需要合并的话,你就得考虑的的思路死否有问题了如果坚持要事后合并那么应该使用 array_merge_recursive然后对得到的结果处理一下$arr2=array( "hdzt_show" => array ( "local_date" => "1420128000", "parent_channel" => "hdzt_show", "channel" => "hdzt_show", "speak_uv" => "39", "speak_amount" => "67" ));$arr=array( "hdzt_show" => array( "local_date" => "1420128000", "parent_channel" => "hdzt_show", "channel" => "hdzt_show", "uv" => "7", "fuv" => "6", "valid_user" => "2", "duration" => "586", "register" =>"0", "third_register" => "0", "pv" => "15" ));$r = array_merge_recursive($arr, $arr2);foreach($r as &$t) foreach($t as &$v) if(is_array($v)) $v = current($v);print_r($r);Array( [hdzt_show] => Array ( [local_date] => 1420128000 [parent_channel] => hdzt_show [channel] => hdzt_show [uv] => 7 [fuv] => 6 [valid_user] => 2 [duration] => 586 [register] => 0 [third_register] => 0 [pv] => 15 [speak_uv] => 39 [speak_amount] => 67 )) merge_arr(array($arr2,$arr,$arr3,$arr4,$arr5,...,$arr1000));能帮到就好 不用客气 18℃~8℃用正则提取出最低温度并转换成整型应该??? php5.2不能连接sql2000?? 求一个正则和截取函数 谁帮我修改一下下面的代码。 此人贴勿回! 请教一下SESSION问题 显示图片 在线等,我的$_FILES['pic']['name'];为什么没有值 php里怎么做datetime类型变量的减法? 如何输出图像啊? thinkphp二次开发控制器不显示 php 中如何表示循环数组的总数
(
"hdzt_show" =>
array (
"local_date" => "1420128000",
"parent_channel" => "hdzt_show",
"channel" => "hdzt_show",
"speak_uv" => "39",
"speak_amount" => "67"
)
);
$arr=array(
"hdzt_show" =>
array(
"local_date" => "1420128000",
"parent_channel" => "hdzt_show",
"channel" => "hdzt_show",
"uv" => "7",
"fuv" => "6",
"valid_user" => "2",
"duration" => "586",
"register" =>"0",
"third_register" => "0",
"pv" => "15"
)
);$r = array_combine(array_keys($arr), array_map('array_merge', $arr, $arr2));
var_export($r);
若考虑到两数组可能存在规模上的差异(第一维数量不同、排列次序不同)则foreach($arr as $k=>$v) {
if(isset($arr2[$k])) $r[$k] = array_merge($v, $arr2[$k]);
}
var_export($r);array (
'hdzt_show' =>
array (
'local_date' => '1420128000',
'parent_channel' => 'hdzt_show',
'channel' => 'hdzt_show',
'uv' => '7',
'fuv' => '6',
'valid_user' => '2',
'duration' => '586',
'register' => '0',
'third_register' => '0',
'pv' => '15',
'speak_uv' => '39',
'speak_amount' => '67',
),
)
if(!$key1) $key1= key($arr[0]);
$return_arr = array();
foreach($arr as $key=>$val){
foreach($val[$key1] as $k=>$v){
$return_arr[$key1][$k] = $v;
}
}
return $return_arr;
}$arr2=array
(
"hdzt_show" =>
array (
"local_date" => "1420128000",
"parent_channel" => "hdzt_show",
"channel" => "hdzt_show",
"speak_uv" => "39",
"speak_amount" => "67"
)
);
$arr=array(
"hdzt_show" =>
array(
"local_date" => "1420128000",
"parent_channel" => "hdzt_show",
"channel" => "hdzt_show",
"uv" => "7",
"fuv" => "6",
"valid_user" => "2",
"duration" => "586",
"register" =>"0",
"third_register" => "0",
"pv" => "15"
)
);print_r(merge_arr(array($arr2,$arr)));exit;
结果如下
Array
(
[hdzt_show] => Array
(
[local_date] => 1420128000
[parent_channel] => hdzt_show
[channel] => hdzt_show
[speak_uv] => 39
[speak_amount] => 67
[uv] => 7
[fuv] => 6
[valid_user] => 2
[duration] => 586
[register] => 0
[third_register] => 0
[pv] => 15
))
这个可以 换成多个数组合并的话要怎么改呢 参考我的方法 把所有数组打包传进去 说时候 你这个我没看太懂 麻烦给我贴一下吧 还有就是 你这个是俩个foreach 一共有上千条数组需要合并 这样的话会不会很慢呢?
如果真的是有桑前的数组需要合并的话,你就得考虑的的思路死否有问题了
如果坚持要事后合并那么应该使用 array_merge_recursive
然后对得到的结果处理一下$arr2=array
(
"hdzt_show" =>
array (
"local_date" => "1420128000",
"parent_channel" => "hdzt_show",
"channel" => "hdzt_show",
"speak_uv" => "39",
"speak_amount" => "67"
)
);
$arr=array(
"hdzt_show" =>
array(
"local_date" => "1420128000",
"parent_channel" => "hdzt_show",
"channel" => "hdzt_show",
"uv" => "7",
"fuv" => "6",
"valid_user" => "2",
"duration" => "586",
"register" =>"0",
"third_register" => "0",
"pv" => "15"
)
);$r = array_merge_recursive($arr, $arr2);
foreach($r as &$t)
foreach($t as &$v) if(is_array($v)) $v = current($v);
print_r($r);Array
(
[hdzt_show] => Array
(
[local_date] => 1420128000
[parent_channel] => hdzt_show
[channel] => hdzt_show
[uv] => 7
[fuv] => 6
[valid_user] => 2
[duration] => 586
[register] => 0
[third_register] => 0
[pv] => 15
[speak_uv] => 39
[speak_amount] => 67
))