I want to target "KeyIwanttotarget" which is present on outside as well as nested.
The original file is JSON which I decoded into php using json_decode(). I want to target the specific key on all levels(external as well as nested) and store the value into another array e.g. using foreach and array_push.
"sample": [
{
"KeyIwanttotarget": "link",
"abc": "123",
"xyz": "123",
"pqr": "123",
"sample": [
{
"KeyIwanttotarget": "group",
"abc": "123",
"xyz": "123"
},
{
"KeyIwanttotarget": "link",
"abc": "123",
"xyz": "123",
"pqr": "123",
"sample": [
{
"KeyIwanttotarget": "link",
"abc": "123",
"xyz": "123",
"pqr": "123",
}
]
}
]
}
];
You need to be able to recursively check all of your key values. The best way to do that is with the array_walk_recursive()
function.
This function allows you to use a callback function which will allow you to create some logic to compare your search string with the key names in the array to be searched.
The array_walk_recursive()
passes two arguments through your callback function. The key and the key's value.
You will pass those arguments in through the function. You will compare the key name against your search string and if it matches you will add the key's value to the results array.
Like so:
$results = array();
$searchString = 'KeyIwanttotarget';
array_walk_recursive($array, function($value, $key) use (&$results, $searchString) {
if($key == $searchString){
$results[] = $value;
return $results;
}
});
print_r($results);
Hope it helps!