php 多维数组内部合并

2015-04-17 18:58:19 +08:00
 444683462

array(3) {
[0] => array(9) {
[0] => string(1) "1"
[1] => string(3) "175"
[2] => string(1) "2"
[3] => string(2) "22"
[4] => string(2) "22"
[5] => string(2) "-1"
[6] => string(1) "0"
[7] => string(11) "小份+0元"
[8] => int(44)
}
[1] => array(9) {
[0] => string(1) "1"
[1] => string(3) "175"
[2] => string(1) "3"
[3] => string(2) "22"
[4] => string(2) "22"
[5] => string(2) "-1"
[6] => string(1) "0"
[7] => string(11) "小份+0元"
[8] => int(66)
}
[3] => array(9) {
[0] => string(1) "1"
[1] => string(3) "175"
[2] => string(1) "2"
[3] => string(2) "22"
[4] => string(2) "22"
[5] => string(2) "-1"
[6] => string(1) "0"
[7] => string(11) "小份+0元"
[8] => int(44)
}
}

请问如何把一样的一维数组合并
并且如果两者一样 把 [2] => string(1) "2"的值相加后的值作为新的值.键不变

谢谢

2874 次点击
所在节点    PHP
5 条回复
ryd994
2015-04-17 19:35:20 +08:00
只能for loop跑一圈呗
内存占用O(n)
时间O(n)
444683462
2015-04-17 19:43:12 +08:00
@ryd994 占用无所谓 求具体代码
jinganchuqi
2015-04-18 00:38:47 +08:00
你去PHP节点看一下我也发过一样的帖子,里面有几种方法。*^_^*
feiyuanqiu
2015-04-18 01:38:23 +08:00
看不懂你的需求
1、要怎样合并?所有的子数组合并成一个数组?按照什么合并?键相同的合并?
2、 [并且如果两者一样 把 [2] => string(1) "2"的值相加后的值作为新的值.键不变]
值相同就相加,值不同呢?取哪一个的值作为合并后的值?
值相加后跟后面的数组的值就不一样了,这种情况合并后取哪个作为合并后的值?
相同的汉字(非数字)值怎么处理?
feiyuanqiu
2015-04-18 02:07:04 +08:00
按照这个规则:所有子数组合并为一个数组,同一个键相同值(数字)相加,不同值取后一个数组此键的值:

$origin = array(
array(1, 175, 2, 22, 22, -1, 0, '小份+0元'),
array(1, 175, 3, 22, 22, -1, 0, '小份+0元'),
array(1, 175, 2, 22, 22, -1, 0, '小份+0元'),
);

$result = array_reduce($origin, function ($result, $item) {
array_walk($item, function (&$v, $k, $prestep) {
if (isset($prestep[$k]) && is_numeric($prestep[$k]) && $prestep[$k] == $v) {
$v += $prestep[$k];
}
}, $result);
return $item;
}, array());

var_dump($result);exit;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184409

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX