Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. $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');
Вы также можете попробовать:
$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);