Issue
I need to dynamically extract only certain keys from an array.
Ex:
$array = [
"a" => true,
"b" => false,
"c" => [
0 => [
"a" => "x",
"b" => [
"x" => "Y"
]
],
1 => [
"a" => "x",
"b" => [
"x" => "Y"
]
],
]
];
And from it I need to extract the following array, which can change:
$newArray = [
"b" => false,
"c" => [
0 => [
"b" => [
"x" => "Y"
]
],
1 => [
"b" => [
"x" => "Y"
]
],
]
];
Solution
this might by easy with the following recursive function:
<?php
$array = [
"a" => true,
"b" => false,
"c" => [
0 => [
"a" => "x",
"b" => [
"x" => "Y"
]
],
1 => [
"a" => "x",
"b" => [
"x" => "Y"
]
],
]
];
$cleaned_array = unset_by_key($array,"a");
$extracted_array = arrayRecursiveDiff ($array, $cleaned_array);
print_r($cleaned_array);
print_r($extracted_array);
function unset_by_key ($arr,$nkey) {
unset($arr[$nkey]);
foreach ($arr as $key=>$val) {
if (is_array($val)) {
$arr[$key] = unset_by_key($val,$nkey);
}
}
return $arr;
}
// THX TO: https://stackoverflow.com/questions/3876435/recursive-array-diff
function arrayRecursiveDiff($aArray1, $aArray2) {
$aReturn = array();
foreach ($aArray1 as $mKey => $mValue) {
if (array_key_exists($mKey, $aArray2)) {
if (is_array($mValue)) {
$aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
} else {
if ($mValue != $aArray2[$mKey]) {
$aReturn[$mKey] = $mValue;
}
}
} else {
$aReturn[$mKey] = $mValue;
}
}
return $aReturn;
}
?>
Answered By - MatWer
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.