我有一个如下的数组
array(2) { ["name"]=> string(36) "newyork" ["categoryid"]=> string(1) "4" }
array(2) { ["name"]=> string(24) "michigun" ["categoryid"]=> string(1) "4" }
array(2) { ["name"]=> string(27) "canada" ["categoryid"]=> string(1) "5" }
array(2) { ["name"]=> string(35) "manhatten" ["categoryid"]=> string(1) "5"
}
我想创建一个新的数组,其中包含
{"4" => newyork,michigun}
{"5" => canada,manhatten}
. .怎样才能做到呢?请帮助。
您可以使用循环并构建数组-
$new = array();
foreach($your_array as $array) {
if(array_key_exists($array['categoryid'], $new)) { // if categoryid is already set the concatenate the name
$new[$array['categoryid']] = $new[$array['categoryid']] . ',' . $array['name'];
} else { // set the name
$new[$array['categoryid']] = $array['name'];
}
}
如果不介意使用外部库,使用ouzo-goodies非常简单:
Arrays::groupBy($array, Functions::extractField('categoryid'));
您可以进一步使用逗号连接名称:
$result = Arrays::groupBy($array, Functions::extractField('categoryid'));
Arrays::map($result, function($value) {
return Joiner::on(',')->mapValues(Functions::extractField('name'))->join($value);
});
使用PHP 5.4数组语法:[]
代替array()
$arr = [
[
"name" => "newyork",
"categoryid" => "4"
],
[
"name" => "michigun",
"categoryid" => "4"
],
[
"name" => "canada",
"categoryid" => "5"
],
[
"name" => "manhatten",
"categoryid" => "5"
],
];
解析$result = [];
foreach ($arr as $el) {
if (array_key_exists($el['categoryid'], $result)) {
$result[$el['categoryid']] = $result[$el['categoryid']] . ',' . $el['name'];
} else {
$result[$el['categoryid']] = $el['name'];
}
}
print_r($result);
结果Array ( [4] => newyork,michigun [5] => canada,manhatten )