I am using Laravel 5.3
.
I have a multidimensional array
like:
Array
(
[id] => 37141
[last_done_on] => []
[children] => Array
(
[0] => NULL /* This must be removed */
[1] => Array
(
[id] => 37142
[last_done_on] => Array()
[children] => Array()
)
[2] => Array
(
[id] => 37143
[last_done_on] => Array()
[children] => Array
(
[0] => Array
(
[id] => 37144
[last_done_on] => Array()
[children] => Array()
)
[1] => Array
(
[id] => 37145
[last_done_on] => Array()
[children] => Array()
)
)
)
[3] => Array
(
[id] => 37157
[last_done_on] => Array()
[children] => Array
(
[0] => Array
(
[id] => 37158
[last_done_on] => Array()
[children] => Array()
)
[1] => Array
(
[id] => 37159
[last_done_on] => Array()
[children] => Array
(
[0] => NULL /* This must be removed */
)
)
)
)
)
)
And I want to remove
the elements
that are NULL
. So the result should be like:
Array
(
[id] => 37141
[last_done_on] => []
[children] => Array
(
[0] => Array
(
[id] => 37142
[last_done_on] => Array()
[children] => Array()
)
[1] => Array
(
[id] => 37143
[last_done_on] => Array()
[children] => Array
(
[0] => Array
(
[id] => 37144
[last_done_on] => Array()
[children] => Array()
)
[1] => Array
(
[id] => 37145
[last_done_on] => Array()
[children] => Array()
)
)
)
[2] => Array
(
[id] => 37157
[last_done_on] => Array()
[children] => Array
(
[0] => Array
(
[id] => 37158
[last_done_on] => Array()
[children] => Array()
)
[1] => Array
(
[id] => 37159
[last_done_on] => Array()
[children] => Array
(
)
)
)
)
)
)
How to do this?
In collection, use filter
some_collection->filter(function($value, $key) {
return $value != null;
});
If you want to remove the null
values but not the empty arrays you could do something like:
function array_remove_null($item)
{
if (!is_array($item)) {
return $item;
}
return collect($item)
->reject(function ($item) {
return is_null($item);
})
->flatMap(function ($item, $key) {
return is_numeric($key)
? [array_remove_null($item)]
: [$key => array_remove_null($item)];
})
->toArray();
}
$newArray = array_remove_null($array);
Hope this helps!
Try this:
function array_filter_recursive($input)
{
foreach ($input as &$value)
{
if (is_array($value))
{
$value = array_filter_recursive($value);
}
}
return array_filter($input, function($var){return !is_null($var);} );
}
Give it a try:
$yourArr= array_map('array_filter', $yourArr);
$yourArr= array_filter( $yourArr);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.