我正在使用mysql和Php,并且正在获取以下格式的数据
Array
(
[country] => India
[total] => 23
)
Array
(
[country] => USA
[total] => 1
)
Array
(
[country] => Japan
[total] => 1
)
我只希望如果任何国家/地区的总匹配项都应采用以下格式的相同数组
Array
(
[country] => India
[total] => 23
)
Array
(
[country] => USA,Japan
[total] => 1
)
这是我的mysql查询
SELECT country,COUNT(*) as total FROM doctors GROUP BY country ORDER BY COUNT(*) DESC
这是我的代码
<?php foreach ($data as $total) {
echo "<pre>";print_R($total);
?>
<p><?php echo $total['country']; ?><?php echo $total['total']; ?></p>
<?php } ?>
答案 0 :(得分:3)
$countriesByTotal = [];
foreach ($data as $row) {
$countriesByTotal[$row['total']][] = $row['country'];
}
foreach ($countriesByTotal as $total => $countries) {
$countriesByTotal[$total] = [
'country' => implode($countries, ','),
'total' => $total
];
}
$countriesByTotal = array_values($countriesByTotal); // optional
print_r($countriesByTotal);
结果:
Array
(
[0] => Array
(
[country] => India
[total] => 23
)
[1] => Array
(
[country] => USA,Japan
[total] => 1
)
)
另一种方法是只使用GROUP_CONCAT()
来更改SQL查询:
SELECT total, GROUP_CONCAT(country) as country
FROM (SELECT country,COUNT(*) as total FROM doctors GROUP BY country) sub
GROUP BY total
ORDER BY total DESC
答案 1 :(得分:2)
array_walk()
可用于连接总数相同的国家/地区。
$data = [];
array_walk($array, function ($value) use (&$data) {
$data[$value['total']] = isset($data[$value['total']])
? ['country' => "{$data[$value['total']]['country']},{$value['country']}", 'total' => $value['total']]
: $value;
});
print '<pre>';
print_r($data);