Из массива группируйте элементы на основе значения ключа с помощью PHP

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

1
задан Testy 13 April 2019 в 12:52
поделиться

2 ответа

$groupByContinent = function(array $list) {
    return array_reduce($list, function($grouped, $item) {
        $grouped[$item['continent']][] = $item;
        return $grouped;
    }, []);
};

$groupedByContinent = $groupByContinent($data);

https://3v4l.org/s6X1c

Или:

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

https://3v4l.org/Be3HL

0
ответ дан Jared Farrish 13 April 2019 в 12:52
поделиться

Вы также можете попробовать:

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

Демо

0
ответ дан Naveed 13 April 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: