проверка наличия определенного ключа в массиве php - PullRequest
1 голос
/ 31 декабря 2011

Я хочу иметь возможность проверить, существует ли определенный ключ в моем массиве. У меня есть массив, и я объединяю несколько массивов из MySQL. Каков наилучший способ сделать это?

например

Array
(
[0] => Array
(
 [id] => 3
 [comments] => comment text
)
[1] => Array
(
 [id] => 3
 [comments] => comment text
)
[2] => Array
(
 [idMenu] => 1
 [names] => text
)
[3] => Array
(
 [idMenu] => 3
 [names] => names text
)
)

Поэтому я пытаюсь увидеть, есть ли в этом массиве комментарии и / или имена.

нужно ли делать оператор if?

Спасибо

Ответы [ 2 ]

4 голосов
/ 31 декабря 2011

Предполагая, что ваш родительский массив всегда будет возвращать кучу дочерних массивов ...

foreach ($parentArray as $childArray) {
    if (array_key_exists("comments", $childArray) { return true; }
    if (array_key_exists("names", $childArray) { return true; }
}

Теперь, это просто проверяет, есть ли у родительского массива дочерний массив с одним из этих ключей. На самом деле проверка значения, чтобы увидеть, является ли оно пустым, потребует немного больше кода, но это должно заставить вас пойти по правильному пути. направление.

3 голосов
/ 31 декабря 2011

Я вытащил эту функцию из руководства . Это рекурсивная версия array_key_exists () . Так как он рекурсивный, не имеет значения, насколько глубоко ключи погружены в массив. Эта функция не сообщает вам , где ключ может быть найден & mdash; только если он существует.

function array_key_exists_r($needle, $haystack)
{
    $result = array_key_exists($needle, $haystack);
    if ($result) return $result;
    foreach ($haystack as $v) {
        if (is_array($v)) {
            $result = array_key_exists_r($needle, $v);
        }
        if ($result) return $result;
    }
    return $result;
}

Используя ваш массив:

<?php
function array_key_exists_r($needle, $haystack)
{
    $result = array_key_exists($needle, $haystack);
    if ($result) return $result;
    foreach ($haystack as $v) {
        if (is_array($v)) {
            $result = array_key_exists_r($needle, $v);
        }
        if ($result) return $result;
    }
    return $result;
}

$arr = array
(
    array
    (
        'id' => 3,
        'comments' => 'comment text'
    ),
    array
    (
        'id' => 3,
        'comments' => 'comment text'
    ),
    array
    (
        'idMenu' => 1,
        'names' => 'text'
    ),
    array
    (
        'idMenu' => 3,
        'names' => 'names text'
    )
);

var_dump(array_key_exists_r('comments', $arr));
var_dump(array_key_exists_r('names', $arr));
var_dump(array_key_exists_r('bob', $arr));
?>

Выход:

bool(true)
bool(true)
bool(false)
...