我有一个简单的位置邮政编码和他们的名字的PHP数组。我想压缩'名称'的代码。这个代码来自WooCommerce数据库区域。
$new_arr = [
[
'name' => 'Jambi Selatan',
'code' => '36139',
'code_name' => '36139 - Jambi Selatan'
],
[
'name' => 'Jambi Selatan',
'code' => '36137',
'code_name' => '36137 - Jambi Selatan'
],
[
'name' => 'Bagan Pete',
'code' => '36129',
'code_name' => '36129 - Bagan Pete'
],
[
'name' => 'Bagan Pete',
'code' => '36127',
'code_name' => '36127 - Bagan Pete'
]
];
我想得到的最终结果由'名称'和'代码'组合如下:我尝试了array_unique方法,但不起作用。
Array (
[0] => Array
(
[name] => Jambi Selatan
[code] => 36139, 36137
[code_name] => 36139, 36139 - Jambi Selatan
)
[1] => Array
(
[name] => Bagan Pete
[code] => 36127, 36129
[code_name] => 36127, 36129 - Bagan Pete
)
)
我尝试了此方法,但未在“code_name”处修复
$out = array();
foreach ($new_arr as $key => $value){
if (array_key_exists($value['name'], $out)){
$out[$value['name']]['code'] .= ', '.$value['code'];
} else {
$out[$value['name']] = array(
'name' => $value['name'],
'code' => $value['code'],
'code_name' => $value['code'] . ' - ' . $value['name']
);
}
}
$out = array_values($out);
打印_r($输出);
4条答案
按热度按时间rbpvctlc1#
您必须按
in_array
检查重复名称并更新现有数组值。如果不存在,请将该值插入$out
数组。wpx232ag2#
对于像我这样有问题的人,这个方法来解决它:
最终结果;
44u64gxh3#
请尝试以下方法之一:
mnemlml84#
一定要避免任何使用多个循环来分组和连接数据的建议。
我赞同@Optional的代码片段,另一种方法是将引用变量推入结果数组,然后只将逗号分隔的值连接到适当的引用变量。
代码:(Demo)
对于任何坚持销毁引用的纯粹开发人员来说,在循环之后调用
unset($ref)
。以下是@Optional的代码片段的简化版本:(Demo)