3v4l.org

run code in 300+ PHP versions simultaneously
<?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