php将两个数组相同的key合并到一个数组
2014-10-22 14:54
615 查看
0
我的方案:有更好的吗?O(∩_∩)O谢谢
php
链接
评论
更多
采纳
公子
13.8k4月21日 回答 ·
4月21日 更新
PHP5.5支持一个很棒的函数
以上代码没有经过测试(因为我本地也没5.5版本的PHP),写法上可能也略丑,但是主要是想介绍一下
如果是用循环做的话,你那样写也是没有问题的,但是我依旧是“能不用嵌套循环就坚决不用嵌套循环”的想法。
题外问一句吧,题主你怎么总是在问这种PHP的数组操作问题啊,这种东西查查文档仔细想想就能出来的东西实在是有点....我就不多说什么了。
链接
2 评论
更多
0
William_Clinton
394月21日 回答
我写了个时间复杂度O(n) 比你的时间短
空间复杂度则要多一点
链接
2 评论
更多
-1
StephenLee
4.6k4月21日 回答 ·
4月21日 更新
题主实在不好意思,上面这个回答我弄错了
@公子 指正后,我已经开始尽量避免这种效率极低的写法,希望答案能帮到题主!:)
转转
$arr = array( array( 'id' => 1, 'user_name'=>'test1' ), array( 'id' => 2, 'user_name'=>'test2' ), array( 'id' => 3, 'user_name'=>'test3' ) ); $arr2 = array( array( 'id' => 1, 'shop_name'=>'shop1' ), array( 'id' => 5, 'shop_name'=>'shop2' ), array( 'id' => 3, 'shop_name'=>'shop3' ) ); 怎么根据2个数组id相同的一维数组,将$arr2的shop_name添加到$arr,如果没有相同的id,shop_name为空,形成如下数组: $good_arr =array( array( 'id' => 1, 'user_name'=>'test1', 'shop_name'=>'shop1' ), array( 'id' => 2, 'user_name'=>'test2', 'shop_name'=>'' ), array( 'id' => 3, 'user_name'=>'test3', 'shop_name'=>'shop3' ) );
我的方案:有更好的吗?O(∩_∩)O谢谢
/*foreach($arr as $key => &$value) { $value['shop_name']=''; } unset( $value ); */ foreach($arr as $k2 =>&$v2) { $v2['shop_name']=''; foreach($arr2 as $k =>$v) { if($v2['id'] == $v['id']) { $v2['shop_name'] = $v['shop_name']; } } } print_r($arr);
php
链接
评论
更多
3 个回答
0采纳
公子
13.8k4月21日 回答 ·
4月21日 更新
PHP5.5支持一个很棒的函数
array_column()非常适合干这个事情,具体请参考手册:http://cn2.php.net/manual/zh/function.array-column.php。
$shop_name = array_column($arr2, 'shop_name', 'id'); foreach($arr as $key => $item) { $exist = array_key_exists($item['id'], $shop_name); $arr[$key]['shop_name'] = $exist ? $shop_name[$item['id']] : ''; } print_r($arr);
以上代码没有经过测试(因为我本地也没5.5版本的PHP),写法上可能也略丑,但是主要是想介绍一下
array_column()这个函数。
如果是用循环做的话,你那样写也是没有问题的,但是我依旧是“能不用嵌套循环就坚决不用嵌套循环”的想法。
$shop_name = array(); foreach($arr2 as $item) $shop_name[$item['id']] = $item['shop_name']; foreach($arr as $key => $item) { $exist = array_key_exists($item['id'], $shop_name); $arr[$key]['shop_name'] = $exist ? $shop_name[$item['id']] : ''; } print_r($arr);
题外问一句吧,题主你怎么总是在问这种PHP的数组操作问题啊,这种东西查查文档仔细想想就能出来的东西实在是有点....我就不多说什么了。
链接
2 评论
更多
0
William_Clinton
394月21日 回答
我写了个时间复杂度O(n) 比你的时间短
空间复杂度则要多一点
<?php $arr = array( array( 'id' => 1, 'user_name'=>'test1' ), array( 'id' => 2, 'user_name'=>'test2' ), array( 'id' => 3, 'user_name'=>'test3' ) ); $arr2 = array( array( 'id' => 1, 'shop_name'=>'shop1' ), array( 'id' => 5, 'shop_name'=>'shop2' ), array( 'id' => 3, 'shop_name'=>'shop3' ) ); $tmp = ''; foreach ($arr2 as $k) { $tmp[$k['id']] = $k; } foreach ($arr as &$v) { $sn = $tmp[$v['id']]['shop_name']; $sn = $sn ? $sn :''; $v['shop_name'] = $sn; } var_dump($arr); ?>
链接
2 评论
更多
-1
StephenLee
4.6k4月21日 回答 ·
4月21日 更新
function filter($item) { return count($item) == 3 ? $item : false; } $newArr = array_filter(array_merge($arr, $arr2), 'filter');
题主实在不好意思,上面这个回答我弄错了
array_merge的用法,现在重写一个,已本机测试:
$tempArr = array(); foreach($arr2 as $item) $tempArr[$item['id']] = $item['shop_name']; foreach($arr as $k => $v) { if(array_key_exists($v['id'], $tempArr)) { $arr[$k]['shop_name'] = $tempArr[$v['id']]; } else { $arr[$k]['shop_name'] = ''; } } $newArr = $arr;
btw,我以前也喜欢写嵌套循环,因为逻辑比较简单,但是自从
@公子 指正后,我已经开始尽量避免这种效率极低的写法,希望答案能帮到题主!:)
转转
相关文章推荐
- php将两个数组相同的key合并到一个数组
- php将两个不同长度数组相同的key合并到一个数组,不同的key也合并进去
- php 数组根据某一个键值,键值相同,则合并数组
- php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
- PHP 将两个一维数组合并到一个二维数组
- php数组合并两个数组(一个数组做键名,另一个做值)
- php数组练习之----查询数组中某key 的键值相同的个数、数组的格式转换、合并数组
- 怎么把两个数组合并成一个php
- 累加两个php数组,键相同的累加,不同的合并
- PHP将两个数组合并成一个数组
- PHP将二维数组某一个字段相同的数组合并起来的方法
- php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
- PHP将二维数组某一个字段相同的数组合并起来的方法
- php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
- php两个数组合并在一起,根据两个数组相同的键进行排序(时间排序)
- PHP中获取我的城市列表,通过排序,通过A-Z的循环!数列出相同的首字母结果!,放到一个以A-Z为key的数组里面去,再返回我要的结果!
- PHP将二维数组某一个字段相同的数组合并起来的方法
- php 数组分组 二维数组中,将某个键值相同的合并到一个数组中
- php使用array_combine合并两个数组为一个数组
- .net 合并两个数组为一个新的数组,两数组中相同的数据只存在一个