检查数组中是否存在密钥

时间:2014-02-19 13:41:53

标签: php arrays

我在php(codeigniter)代码中有2个数组,我想检查其中一个数组的值是否存在于第二个数组中。

以下是我的尝试:

$filters = $this->categoriesFiltersModel->get();        
foreach($filters as $f=> $val) {           
    echo $val['filterid'] ."<br />";           
}

$formValues = $this->input->post(NULL, TRUE);
foreach($formValues as $key => $value) {
    echo " Key: " . $key . "</br>";
}

$search_array = array($f['filterid']);
if (array_key_exists($key, $search_array)) {
    echo "use query 1";
} else {
    echo "use query 2";
}

die();

第一个数组返回如下值:

1 2 3 4 ....

和第二个 FIELD1 域2 字段3

所以我期待在这里打印使用查询1,但是,无论我做什么,我总是使用查询2打印。任何人都可以指出我做错了什么?

问候,约翰

3 个答案:

答案 0 :(得分:0)

使用此函数而不是array_key_exist()

function array_ikey_exists($key,$arr)
{
    $e = 0; //$key = addslashes($key);
    if(is_array($arr) && $arr !==array())
    {
        foreach($arr as $k => $v)
        {   
            if(strtolower($k) == strtolower($key))
                $e++;
        }
        if($e>0)
            return true;       
        else
            return false;
    }
    else
        return false;
} 

答案 1 :(得分:0)

我看到的问题是搜索阵列上没有设置数组,搜索数组中应该有正确的键。如果你只是像你那样做,那么数组的键从0开始。另一个问题可能是,如果$ key的值是'field1',它将不匹配任何原因然后需要是一个关联数组,被搜查。

$filters = $this->categoriesFiltersModel->get();        
foreach($filters as $f=> $val) {           
    echo $val['filterid'] ."<br />";           
}

$formValues = $this->input->post(NULL, TRUE);
foreach($formValues as $key => $value) {
    echo " Key: " . $key . "</br>";
}

$search_array = array($key => $f['filterid']);
if (array_key_exists($key, $search_array)) {
    echo "use query 1";
} else {
    echo "use query 2";
}

die();

答案 2 :(得分:0)

您可以使用array_keysin_array。尝试:

$formValues = $this->input->post(NULL, TRUE);
$keys = array_keys($formValues);

$result= array();
$filters = $this->categoriesFiltersModel->get();        
foreach($filters as $f=> $val) {           
    if(in_array($val['filterid'],$keys)){
           $result[] = $val['filterid'];
    }            
}

现在result数组将保存匹配的元素。

请参阅演示here