Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数组中,使用PHP根据键值对项目进行分组_Php_Arrays - Fatal编程技术网

从数组中,使用PHP根据键值对项目进行分组

从数组中,使用PHP根据键值对项目进行分组,php,arrays,Php,Arrays,我在PHP中创建了这个多维数组: Array ( [0] => Array ( [continent] => Europa [country] => France [capital] => Paris ) [1] => Array ( [continent] => Europa

我在PHP中创建了这个多维数组:

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');