为了账号安全,请及时绑定邮箱和手机立即绑定

根据通用值对数组进行分组

根据通用值对数组进行分组

PHP
蝴蝶刀刀 2021-05-07 10:11:21
我有一个具有通用产品代码和产品名称的数组。对于每个product_code,可以具有两种cha_sty_id类型,即push或pull。这是我拥有的数组结构。$array = [            0 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PUSH",                "chs_name" => "WF"            ],            1 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PUSH",                "chs_name" => "WFR"            ],            2 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PUSH",                "chs_name" => "STK Food"            ],            3 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PULL",                "chs_name" => "4 Stars"            ],            4 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PULL",                "chs_name" => "5 Stars"            ],            5 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PULL",                "chs_name" => "Modern Thai"            ],            6 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PULL",                "chs_name" => "BBQ Buffet"            ],            7 => [                "product_code" => "67021687",                "product_name" => "Spaces",                "cha_sty_id" => "PULL",                "chs_name" => "Chinese"            ]        ];现在我想要的结果是这样的:0 => [    'product_code' => 67021687,    'product_name' => 'Spaces.    'push => array(....ALL chs_name for push),    'pull' => array with chs_name for pull]但是我无法解决。有人可以帮助我吗?
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

如何将您的foreach循环修改为此:


$list = array();

foreach ($records as $data) {

    $code = $data['product_code']; // as key

    if (!isset($list[$code])) { // set new array if not exist

        $list[$code] = array("product_code" => $code, "product_name" => $data['product_name'], "push" => [], "pull" => []);

    }

    $subKey = strtolower($data['cha_sty_id']); // get push / pull as new subkey

    $list[$code][$subKey][] = $data['chs_name']; // append to the array

}

如果不需要,您可以用来array_values从$list循环后删除代码键


查看完整回答
反对 回复 2021-05-28
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以使用array_walk,array_push


$res = [];

array_walk($array, function($v, $k) use (&$res){ 

if(in_array($v['product_code'], array_column($res, 'product_code'))){

    array_push($res[$v['product_code']]["push"], $v['chs_name']);

    array_push($res[$v['product_code']]["pull"], $v['chs_name']);

}else{

  $res[$v['product_code']] = [

      "product_code" => $v['product_code'],

      "product_name" => $v['product_name'],

      "push" => [$v['chs_name']],

      "pull" => [$v['chs_name']]

  ];

 }

});

echo '<pre>';

print_r(array_values($res));

此处演示


查看完整回答
反对 回复 2021-05-28
  • 2 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信