array_walk、array_walk_recursiveを使うとスッキリ書けます。
// forEach
$array = [
'hoge1' => null,
'hoge2' => null,
'hoge3' => null
];
foreach ($array as $key => &$value) {
if ($value === null) {
$value = 0;
}
}
var_dump($array);
// array(3) {
// ["hoge1"]=>
// int(0)
// ["hoge2"]=>
// int(0)
// ["hoge3"]=>
// &int(0)
// }
// array_walk
$array2 = [
'hoge1' => null,
'hoge2' => null,
'hoge3' => null
];
array_walk($array2, function (&$value) {
if ($value === null) {
$value = 0;
}
});
var_dump($array2);
// array(3) {
// ["hoge1"]=>
// int(0)
// ["hoge2"]=>
// int(0)
// ["hoge3"]=>
// int(0)
// }
// array_walk_recursive
$array3 = [
'hoge1' => [
'key1' => null
],
'hoge2' => [
'key2' => null
],
'hoge3' => [
'key3' => null
],
];
array_walk_recursive($array3, function (&$value) {
if ($value === null) {
$value = 0;
}
});
// アロー関数でもかける。
array_walk_recursive($array3, fn (&$value) => $value ??= 0);
var_dump($array3);
// array(3) {
// ["hoge1"]=>
// array(1) {
// ["key1"]=>
// int(0)
// }
// ["hoge2"]=>
// array(1) {
// ["key2"]=>
// int(0)
// }
// ["hoge3"]=>
// array(1) {
// ["key3"]=>
// int(0)
// }
// }