从数组中,使用PHP根据键值对项目进行分组
我在PHP中创建了这个多维数组:从数组中,使用PHP根据键值对项目进行分组,php,arrays,Php,Arrays,我在PHP中创建了这个多维数组: Array ( [0] => Array ( [continent] => Europa [country] => France [capital] => Paris ) [1] => Array ( [continent] => Europa
Array
(
[0] => Array
(
[continent] => Europa
[country] => France
[capital] => Paris
)
[1] => Array
(
[continent] => Europa
[country] => Spain
[capital] => Madrid
)
[2] => Array
(
[continent] => Asia
[country] => Russia
[capital] => Moscow
)
)
我如何根据欧洲大陆对国家进行分组
因此,同一个大陆上的国家应该聚在一起
所需输出应为:
Array
(
[Europa] => Array
(
[country] => France
[capital] => Paris
),
(
[country] => Spain
[capital] => Madrid
)
[Asia] => Array
(
[country] => Russia
[capital] => Moscow
)
)
请问PHP是如何实现的
谢谢。您可以创建一个新的数组变量,循环执行数据数组检查以查看是否已创建密钥,如果尚未创建,则创建该密钥并将相关数据添加到该密钥
<?php
// $data: the name of your array
$grouped_data = array();
for ($i = 0; $i < count($data); $i++) {
$key = $data[$i]['continent'];
if (!isset($grouped_data[$key])) {
$grouped_data[$key] = array();
}
$grouped_data[$key][] = array(
'country' => $data[$i]['country'],
'capital' => $data[$i]['capital']
);
}
?>
您也可以尝试:
$data = array(
array(
"continent" => "Europa",
"country" => "France",
"capital" => "Paris",
),
array(
"continent" => "Europa",
"country" => "Spain",
"capital" => "Madrid",
),
array(
"continent" => "Asia",
"country" => "Russia",
"capital" => "Moscow",
)
);
$group_by = 'continent';
$attributes = array( 'country', 'capital' );
$output = array();
foreach( $data as $country ) {
if( isset( $country[$group_by] ) ) {
$one = array();
foreach( $attributes as $attribute ) {
if( isset( $country[$attribute] ) ) {
$one[$attribute] = $country[$attribute];
}
}
$output[ $country[$group_by] ][] = $one;
}
}
print_r($output);
或:
请展示您已经尝试过的内容。。。或者你想让别人帮你写代码?这会有帮助:这很容易。试试看,你会发现你自己做到了。这是关联数组最基本的用法。
$groupByContinent = function(array $list) {
return array_reduce($list, function($grouped, $item) {
$grouped[$item['continent']][] = $item;
return $grouped;
}, []);
};
$groupedByContinent = $groupByContinent($data);
$groupByProperty = function(array $list, string $property) {
return array_reduce($list, function($grouped, $item) use(&$property) {
$grouped[$item[$property]][] = $item;
return $grouped;
}, []);
};
$groupedByContinent = $groupByProperty($data, 'continent');