V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
444683462
V2EX  ›  PHP

php 多维数组内部合并

  •  
  •   444683462 · 2015-04-17 18:58:19 +08:00 · 2851 次点击
    这是一个创建于 3298 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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"的值相加后的值作为新的值.键不变

    谢谢

    5 条回复    2015-04-18 02:07:04 +08:00
    ryd994
        1
    ryd994  
       2015-04-17 19:35:20 +08:00 via Android
    只能for loop跑一圈呗
    内存占用O(n)
    时间O(n)
    444683462
        2
    444683462  
    OP
       2015-04-17 19:43:12 +08:00
    @ryd994 占用无所谓 求具体代码
    jinganchuqi
        3
    jinganchuqi  
       2015-04-18 00:38:47 +08:00 via Android
    你去PHP节点看一下我也发过一样的帖子,里面有几种方法。*^_^*
    feiyuanqiu
        4
    feiyuanqiu  
       2015-04-18 01:38:23 +08:00
    看不懂你的需求
    1、要怎样合并?所有的子数组合并成一个数组?按照什么合并?键相同的合并?
    2、 [并且如果两者一样 把 [2] => string(1) "2"的值相加后的值作为新的值.键不变]
    值相同就相加,值不同呢?取哪一个的值作为合并后的值?
    值相加后跟后面的数组的值就不一样了,这种情况合并后取哪个作为合并后的值?
    相同的汉字(非数字)值怎么处理?
    feiyuanqiu
        5
    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;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5154 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 03:48 · PVG 11:48 · LAX 20:48 · JFK 23:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.