php, Проверяющий, существует ли значение в массиве массива

У меня есть массив в массиве.

$a = array ( 0 => array ( 'value' => 'America', ), 1 => array ( 'value' => 'England', ), )

Как я проверяю, существует ли 'Америка' в массиве? Американский массив мог быть любым ключом, и могло быть любое количество подмассивов, таким образом, обобщенное решение.

Наблюдение php руководства, я вижу in_array, но который только работает на верхний слой. так что-то как in_array("America", $a) не работал бы.

Спасибо.

8
задан Mark 12 March 2010 в 21:10
поделиться

2 ответа

Общее решение:

function deep_in_array($needle, $haystack) {
    if(in_array($needle, $haystack)) {
        return true;
    }
    foreach($haystack as $element) {
        if(is_array($element) && deep_in_array($needle, $element))
            return true;
    }
    return false;
}

Причина, по которой Я решил использовать in_array и цикл: Прежде чем я исследую более глубокие уровни структуры массива, я убеждаюсь, что искомое значение не находится на текущем уровне. Таким образом, я надеюсь, что код будет быстрее, чем выполнение какого-либо метода поиска в глубину .


Конечно, если ваш массив всегда двумерный, и вы хотите искать только в таких массивах, это будет быстрее:

function in_2d_array($needle, $haystack) {
    foreach($haystack as $element) {
        if(in_array($needle, $element))
            return true;
    }
    return false;
}
12
ответ дан 5 December 2019 в 10:02
поделиться

PHP не имеет встроенной функции array_search_recursive () , но вы можете определить ее:

function array_search_recursive($needle, $haystack) {
    foreach ($haystack as $value) {
        if (is_array($value) && array_search_recursive($needle, $value)) return true;
        else if ($value == $needle) return true;
    }
    return false;
}

Непроверено, но вы поняли идею.

5
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: