I have the follow problem. I got this array structure:
Array
(
[1702] => Array
(
[unit] => Unit name
[info] => Array
(
[735100] => Array
(
[group] => Ac Fluorhidricos
)
[0] => Array
(
[group] => Other
[services] => Array
(
[731171] => [ARES70] Oil 01
[731172] => [ARES71] Oil 02
[731112] => [ARES11] Oil 03
)
)
[733496] => Array
(
[group] => Activity
)
[732216] => Array
(
[group] => Water SMA
)
[732280] => Array
(
[group] => Water MAR SMA
)
[732307] => Array
(
[group] => Blue water SMA
)
[732369] => Array
(
[group] => Residual water SMA
[services] => Array
(
[732373] => [ARESSMA05] Water 01
[732388] => [ARESSMA20] Water 02
[732374] => [ARESSMA06] Water 03
[732397] => [ARESSMA29] Water 04
[732375] => [ARESSMA07] Water 05
)
)
)
)
)
But I need to delete all elements that do not contain "services" in the array:
Array
(
[1702] => Array
(
[unit] => Unit name
[info] => Array
(
[0] => Array
(
[group] => Other
[services] => Array
(
[731171] => [ARES70] Oil 01
[731172] => [ARES71] Oil 02
[731112] => [ARES11] Oil 03
)
)
[732369] => Array
(
[group] => Residual water SMA
[services] => Array
(
[732373] => [ARESSMA05] Water 01
[732388] => [ARESSMA20] Water 02
[732374] => [ARESSMA06] Water 03
[732397] => [ARESSMA29] Water 04
[732375] => [ARESSMA07] Water 05
)
)
)
)
)
I have been trying to use the array_filter function but I am not getting the result I need. I would greatly appreciate your help.
I'm hoping for some clue or function that can help me solve the problem.
You can do it like this, assuming the structure of your array is always like you posted (numerical key in the first level, unit
and info
in the second, a list of arrays potentially having the key of services
in their first level). A lot of assumptions, for sure, but if you know that this is the structure you'll have, it'll work.
<?php
$arr = [
1702 => [
"unit" => "Unit name",
"info" => [
735100 => [
"group" => "Ac Fluorhidricos",
],
0 => [
"group" => "Other",
"services" => [
"731171" => "[ARES70] Oil 01",
"731172" => "[ARES71] Oil 02",
"731112" => "[ARES11] Oil 03",
]
],
733496 => [
"group" => "Activity"
],
732216 => [
"group" => "Water SMA"
],
732280 => [
"group" => "Water MAR SMA"
],
732307 => [
"group" => "Blue water SMA"
],
732369 => [
"group" => "Residual water SMA",
"services" => [
732373 => "[ARESSMA05] Water 01",
732388 => "[ARESSMA20] Water 02",
732374 => "[ARESSMA06] Water 03",
732397 => "[ARESSMA29] Water 04",
732375 => "[ARESSMA07] Water 05"
]
]
]
]
];
$endArr = [];
foreach($arr as $key=>$value) {
// Just setting it out right
// We'll remove what we don't need
// once we come to it...
$endArr[$key] = $value;
$info = $value["info"];
foreach($info as $itemId=>$item) {
// ... right about here
if(!in_array("services",array_keys($item))) {
unset($endArr[$key]["info"][$itemId]);
}
}
// Optional - if there's nothing left within info, remove it
// Commented out, since you didn't specify whether you want that
// if(!$endArr[$key]["info"]) {
// unset($endArr[$key];
// }
}
print_r($endArr);
The output:
Array
(
[1702] => Array
(
[unit] => Unit name
[info] => Array
(
[0] => Array
(
[group] => Other
[services] => Array
(
[731171] => [ARES70] Oil 01
[731172] => [ARES71] Oil 02
[731112] => [ARES11] Oil 03
)
)
[732369] => Array
(
[group] => Residual water SMA
[services] => Array
(
[732373] => [ARESSMA05] Water 01
[732388] => [ARESSMA20] Water 02
[732374] => [ARESSMA06] Water 03
[732397] => [ARESSMA29] Water 04
[732375] => [ARESSMA07] Water 05
)
)
)
)
)
Test it here.