代码之家  ›  专栏  ›  技术社区  ›  SBB

类从会话中查找数组中的值

  •  0
  • SBB  · 技术社区  · 5 年前

    我正在尝试创建一个简单的类,用于检查数组中是否存在值。有一个会话包含多个 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' && $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 回复  |  直到 5 年前
        1
  •  0
  •   TheStart101    5 年前

    为了让我的代码为您工作,您可能需要更改一点数组或更改一点代码,但不是在一堆键中循环,试图找到正确的一个,我们只是在数组中查找键,如果它们没有设置,则返回false,或者如果我们找到keyring-tools-$tool_id-key{$key}我们将返回该值,如果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]) && isset($tool[$tool_id]["key_{$key_id}"]))
             return $tool[$tool_id]["key_{$key_id}"];
        return false;
    }