欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php二维数组找出相同的key,拼接value

程序员文章站 2022-05-25 11:29:16
...
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);

回复内容:

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);

    $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

相关标签: php 二维数组