Эта рекурсивная функция должна сработать ... будет касаться только пустых массивов
<?php
function emptyArraysToNull(&$object){
if(is_array($object))
foreach ($object as $key => &$value) {
if (is_array($value)) {
$value = emptyArraysToNull($value);
}
if (empty($value)) {
$object[$key] = null;
}
}
return $object;
}
// TEST
$very_nested_array = [
[
"name" => "test",
"id" => 1,
"districts" => [
"id" => 2,
"districts" => [],
"test" => []
]
],
[
"id" => []
]
];
print_r(emptyArraysToNull($very_nested_array));
Вывод:
array(2) {
[0]=>
array(3) {
["name"]=>
string(4) "test"
["id"]=>
int(1)
["districts"]=>
array(3) {
["id"]=>
int(2)
["districts"]=>
NULL
["test"]=>
NULL
}
}
[1]=>
array(1) {
["id"]=>
NULL
}
}
Живая демонстрация: http://sandbox.onlinephpfunctions.com/code/4644ec81b623d9cd0c79e1aa67ab55a64cd9416d