Класс PHP для поиска значения в массиве из сеанса

#php #class

#php #класс

Вопрос:

Я пытаюсь создать простой класс, который я могу использовать для проверки, существует ли значение в массиве. Существует сеанс, который содержит несколько tool значений. Я пытаюсь передать toolID этой функции, а также key и посмотреть, существует ли это значение.

Данные сеанса:

 Array
(
    [keyring] => Array
        (
            [tool] => Array
                (
                    [toolID] => 1859
                    [keys] => Array
                        (
                            [0] => 49
                            [1] => 96
                        )

                )

        )

)
  

 class Keyring
{

    public function checkKey($key, $toolID){
        $keyring = $_SESSION['keyring'];
        if(isset($keyring)){
            foreach($keyring['tool'] as $k => $v) {
                if($k == 'toolID' amp;amp; $v == $toolID){
                    if (in_array($key, $k->keys)){
                        return true;
                    }
                }
            }
        }
        return false;
    }

} 

$keyring = new Keyring();
print_r($keyring->checkKey(49, 1859));
  

В этом примере я пытаюсь увидеть, 49 существует ли ключ в сеансе для инструмента 1859 .

Я получаю следующую ошибку: Warning: in_array() expects parameter 2 to be array, null given in .

Есть ли лучший подход для этого? Все, что я ищу, это true / false относительно того, существует ли этот ключ в keys массиве для указанного инструмента.

Комментарии:

1. $k->keys должно быть $keyring['tool']['keys']

2. Или просто используйте $v проверку, является ли $v это массивом, или; проверка $k === ‘keys’

Ответ №1:

Для того, чтобы мой код работал, вам, возможно, потребуется немного изменить свой массив или немного изменить код, но вместо того, чтобы перебирать связку ключей, пытаясь найти правильный, мы просто ищем ключи в массиве, если они не заданы, затем возвращаем false, или, если мы найдем keyring — tools — $tool_id — key_{$key_id}, мы просто собираемся вернуть это значение, если key_49 = false, функция возвращает false. Для вас это должно быть немного быстрее для запуска на сервере.

 function has_keyring($tool_id, $key_id)
{
    //Just to keep the code tidy let's store the tools key in $tool variable
    $tool = $_SESSION['keyring']['tools'];
    if(isset($tool[$tool_id]) amp;amp; isset($tool[$tool_id]["key_{$key_id}"]))
         return $tool[$tool_id]["key_{$key_id}"];
    return false;
}