<?php
$arr = [
['one' => 'once',
'two' => ['one' => 'twice', 'two' => 'twice', ['one' => 'thrice']],
'three' => 'once',]
];
$needle = 'one'; // the key we're looking for
$result = pathFinder($arr, $needle);
/**
* function pathFinder() returns the path(s) to a key in an array.
*
* @param array $arr the subject array
* @param string $needle the key we're looking for
*
* @return array the paths leading to the key we're looking for
*/
function pathFinder(array $arr = [], $needle = ''): array
{
static $path = '';
static $paths = [];
foreach ($arr as $key => $value) {
if (is_array($value)) {
$path .= $key . "->";
pathFinder($value, $needle);
} else {
if ($key === $needle) {
$paths[] = $path . $key; // store path
}
}
}
return $paths; // return all found paths to key $needle
}
echo '<pre>';
print_r($result);
echo '</pre>';
- Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- <pre>Array
(
[0] => 0->one
[1] => 0->two->one
[2] => 0->two->0->one
)
</pre>
preferences:
147.55 ms | 407 KiB | 5 Q