php二维数组找出相同的key,拼接value
天蓬老师
天蓬老师 2017-04-10 16:43:44
[PHP讨论组]
array(
    array(
        "ShopID" => "C024",
        "Name" => "a",
        "ListNo" => 13343
    ),
    array(
        "ShopID" => "C024",
        "Name" => "c",
        "ListNo" => 13343
    ),
    array(
        "ShopID" => "C024",
        "Name" => "b",
        "ListNo" => 13342
    ),
    array(
        "ShopID" => "C024",
        "Name" => "d",
        "ListNo" => 13342
    ),
    array(
        "ShopID" => "C024",
        "Name" => "e",
        "ListNo" => 13346
    ),
    array(
        "ShopID" => "C024",
        "Name" => "f",
        "ListNo" => 13346
    )
);

ListNo相同的值重新组织成一个数组,实现的效果:

array("ShopID" => "C024", "Name" => array("a", "c"), "ListNo" = 13343);
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
高洛峰
    $arr = array(
        array(
            "ShopID" => "C024",
            "Name"   => "a",
            "ListNo" => 13343
        ),
        array(
            "ShopID" => "C024",
            "Name"   => "c",
            "ListNo" => 13343
        ),
        array(
            "ShopID" => "C024",
            "Name"   => "b",
            "ListNo" => 13342
        ),
        array(
            "ShopID" => "C024",
            "Name"   => "d",
            "ListNo" => 13342
        ),
        array(
            "ShopID" => "C024",
            "Name"   => "e",
            "ListNo" => 13346
        ),
        array(
            "ShopID" => "C024",
            "Name"   => "f",
            "ListNo" => 13346
        )
    );
    $lists = array_column($arr, 'ListNo');
    $lists = array_flip(array_flip($lists));
    $result = array();
    foreach ($lists as $k => $v) {
        $res = array();
        foreach ($arr as $key => $val) {
            if ($val['ListNo'] == $v) {
                if (count($res) == 0) {
                    $res = $val;
                } else {
                    if ($res['ShopID'] != $val['ShopID']) {
                        if (!is_array($res['ShopID'])) {
                            $res['ShopID'] = array($res['ShopID'], $val['ShopID']);
                        } else {
                            $res['ShopID'][] = $val['ShopID'];
                        }
                    }

                    if ($res['Name'] != $val['Name']) {
                        if (!is_array($res['Name'])) {
                            $res['Name'] = array($res['Name'], $val['Name']);
                        } else {
                            $res['Name'][] = $val['Name'];
                        }
                    }
                }
            }
//        var_dump($res);
        }
        $result[] = $res;
    }
    var_dump($result);

结果如下:
array (size=3)

0 =>

array (size=3)
  'ShopID' => string 'C024' (length=4)
  'Name' => 
    array (size=2)
      0 => string 'a' (length=1)
      1 => string 'c' (length=1)
  'ListNo' => int 13343

1 =>

array (size=3)
  'ShopID' => string 'C024' (length=4)
  'Name' => 
    array (size=2)
      0 => string 'b' (length=1)
      1 => string 'd' (length=1)
  'ListNo' => int 13342

2 =>

array (size=3)
  'ShopID' => 
    array (size=2)
      0 => string 'C024' (length=4)
      1 => string 'C025' (length=4)
  'Name' => 
    array (size=3)
      0 => string 'e' (length=1)
      1 => string 'f' (length=1)
      2 => string 'g' (length=1)
  'ListNo' => int 13346
天蓬老师

遍历数组,遍历时把ListNo作为Key,然后判断下如果isset同样的Key就对Name做合并操作,没有就直接写入,到最后array_merge一下清除掉数组的Key

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号