我有简单的PHP数组用于位置邮政编码及其名称。我希望'name'压缩'代码'。此代码来自WooCommerce数据库区域。
Array (
[0] => Array
(
[name] => Jambi Selatan
[code] => 36139
[code_name] => 36139 - Jambi Selatan
)
[1] => Array
(
[name] => Jambi Selatan
[code] => 36137
[code_name] => 36137 - Jambi Selatan
)
[2] => Array
(
[name] => Bagan Pete
[code] => 36129
[code_name] => 36129 - Bagan Pete
)
[3] => Array
(
[name] => Bagan Pete
[code] => 36127
[code_name] => 36127 - Bagan Pete
)
)
我希望得到最终结果由'name'和'code'组合如下:我尝试使用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);
print_r($out);
答案 0 :(得分:1)
您必须按in_array
检查重复的名称并更新存在的数组值。如果不存在,请将该值插入$out
数组。
$out = array();
foreach($new_arr as $k=>$v) {
//empty array state
if(count($out) == 0) {
$out[] = $v;
continue;
}
foreach ($out as $key => $value) {
if(in_array($v["name"],$value)) {
$out[$key]["code"] .= ",".$v["code"];
//for the code_name output as OP described
$nn = explode("-", $value["code_name"]);
$l = count($nn) - 1;
unset($nn[$l]);
$out[$key]["code_name"] = implode($nn).",".$v["code_name"];
break;
} else {
if((count($out)-1) == $key) {
$out[] = $v;
}
}
}
}
var_dump($out);
答案 1 :(得分:0)
对于像我这样的问题,这个方法可以解决它:
$out = array();
foreach ($new_arr as $key => $value){
if (array_key_exists($value['name'], $out)){
$out[$value['name']]['code'] .= ', '.$value['code'];
$out[$value['name']]['code_name'] .= ', '.$value['code'] . ' - ' . $value['name'];
} else {
$out[$value['name']] = array(
'name' => $value['name'],
'code' => $value['code'],
'code_name' => $value['code']
);
}
}
$out = array_values($out);
print_r($out);
最终结果;
Array
(
[0] => Array
(
[name] => Jambi Selatan
[code] => 36139, 36137
[code_name] => 36139, 36137 - Jambi Selatan
)
[1] => Array
(
[name] => Bagan Pete
[code] => 36129, 36127
[code_name] => 36129, 36127 - Bagan Pete
)
)
答案 2 :(得分:0)
请尝试以下方法作为另一种方法:
Spring-boot