@seoplus2019

Как найти элемент в многомерном массиве используя array_search?

есть некий массив
Array
(
    [0] => Array
        (
            [node] => Array
                (
                    [id] => 17874292930344481
                    [text] => 
                    [created_at] => 1555015118
                    [did_report_as_spam] => 
                    [owner] => Array
                        (
                            [id] => 6773204196
                            [is_verified] => 
                            [profile_pic_url] => 
                            [username] => gadalka_lida999
                        )

                    [viewer_has_liked] => 
                    [edge_liked_by] => Array
                        (
                            [count] => 0
                        )

                )

        )

    [1] => Array
        (
            [node] => Array
                (
                    [id] => 18036829474119034
                    [text] => Her account please
                    [created_at] => 1555019066
                    [did_report_as_spam] => 
                    [owner] => Array
                        (
                            [id] => 4245266739
                            [is_verified] => 
                            [profile_pic_url] => 
                            [username] => el94__
                        )

                    [viewer_has_liked] => 
                    [edge_liked_by] => Array
                        (
                            [count] => 0
                        )

                )

        )

как проверить есть ли в этом массиве username = gadalka_lida999

делал так но не работает

$key = array_search("gadalka_lida999", array_column($array, 'username'));
echo $arr[$key]["username"];
  • Вопрос задан
  • 2544 просмотра
Пригласить эксперта
Ответы на вопрос 3
abyrvalg
@abyrvalg
Если неизвестно, где конкретно может находиться искомая пара ключ-значение, то как-то так:

function isItemExists(iterable $source, $expectedKey, $expectedValue): bool
    {
        $iterator = new RecursiveIteratorIterator(
            new RecursiveArrayIterator($source, RecursiveArrayIterator::CHILD_ARRAYS_ONLY),
            RecursiveIteratorIterator::LEAVES_ONLY
        );

        foreach ($iterator as $itemKey => $itemValue) {
            if ($expectedKey === $itemKey && $expectedValue === $itemValue) {
                return true;
            }
        }

        return false;
    }
Ответ написан
Комментировать
Как вариант, обходить массив реккурсивно. На каждом из "уровней" использовать array_search(). Если найдено - выйти.
Ответ написан
0xD34F
@0xD34F
$key = array_search($name, array_map(function($n) {
  return $n['node']['owner']['username'];
}, $arr));

if ($key !== false) {
  $el = $arr[$key];
  ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы