PHP - Проверить, существует ли значение в массиве, но только для указанного ключа c - PullRequest
0 голосов
/ 13 июля 2020

У меня есть массив, и я проверяю, существует ли значение в массиве, используя in_array(). Однако я хочу проверить только ключ ID, а не date.

$arr = ({
    "ID":"10",
    "date":"04\/22\/20"
},
{
    "ID":"20",
    "date":"05\/25\/20"
},
{
    "ID":"32",
    "date":"07\/13\/20"
});

Итак, в этом примере условие не должно выполняться, поскольку 25 существует в date, но нет в ID.

if (in_array("25", $arr)) {
    return true;
}

Ответы [ 3 ]

1 голос
/ 13 июля 2020

Для версий PHP (> = 5.5.0) есть простой способ сделать это

$arr = ({
    "ID":"10",
    "date":"04\/22\/20"
},
{
    "ID":"20",
    "date":"05\/25\/20"
},
{
    "ID":"32",
    "date":"07\/13\/20"
});

$searched_value = array_search('25', array_column($arr, 'ID'));

Вот документация для array_column .

1 голос
/ 13 июля 2020

Чтобы сделать это напрямую, вам нужно l oop над массивом.

function hasId($arr, $id) {
    foreach ($arr as $value) {
        if ($value['ID'] == $id) return true;
    }
    return false;
}

Если вам нужно сделать это для нескольких идентификаторов, лучше преобразовать массив в карту и использовать isset.

$map = array();
foreach ($arr as $value) {
    $map[$value['ID']] = $value;
    // or $map[$value['ID']] = $value['date'];
}

if (isset($map["25"])) {
    ...
}

Это также позволит вам дешево искать любое значение на карте по идентификатору, используя $map[$key].

0 голосов
/ 13 июля 2020

Также можно проверить с помощью функции array_filter:

$searchId = '25';
$arr = [[
    "ID" => "10",
    "date" => "04\/22\/20"
],
[
    "ID" => "25",
    "date" => "05\/25\/20"
],
[
    "ID" => "32",
    "date" => "07\/13\/20"
]];

$items = array_filter($arr, function ($item) use ($searchId) { 
    return $item['ID'] === $searchId;
});

if (count($items) > 0) {
   echo 'found';
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...