Как получить первый попавшийся ключ по подходящему значению многомерного массива у которого все индексы цифровые?

200
20 апреля 2018, 14:56

Допустим есть вот такой массив

[ 1, 2, [ 1, 2, [ 1, 2, 3 ], 4, 5 ], 4, 5 ]

Мне нужно получит первый попавшийся (любой) ключ у которого значение например равно 3 (трем).

Answer 1
$arr = [ 1, 2, [ 1, 2, [ 1, 2, 3 ], 4, 5 ], 4, 5 ];
function recu($arr, $oldKey = "") {
    foreach ($arr as $key => $value) {
        if ($value == 3)
                echo "finded in position ".$oldKey."_".$key."_";
        if (is_array($value))
            return recu($value, "".$oldKey."_".$key."_");
    }
}
recu($arr);
Answer 2

Если нужно получить именно массив соответствующей структуры:

$arr = [ 1, 2, [ 1, 2, [ 1, 2, 3 ], 4, 5 ], 4, 5 ];
print_r( foo($arr, 3) );

function foo(Array $arr, $need) {
    static $triger = true;
    $result = [];
    foreach ($arr as $key => $val) {
        if ( is_array($val) && !empty($tmp = foo($val, $need)) ) {
            $result[$key] = $tmp;
        }
        if ($val == $need & $triger) {
            $result[$key] = $val;
            $triger = false;
        }
    }
    return $result;
}

Результат:

Array
(
    [2] => Array
        (
            [2] => Array
                (
                    [2] => 3
                )
        )
)
READ ALSO
Почему сначала идёт квадратная скобка, а потом запятая?

Почему сначала идёт квадратная скобка, а потом запятая?

string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )

206
Не заходит в manager после переноса modx revo

Не заходит в manager после переноса modx revo

Здравствуйте, перенес сайт modx revo на новый хостингСайт работает а при вводе Правильного логина и пароля в /manager/ просто обновляется страница

212