array_key_exist(),数组为键

时间:2016-06-22 12:12:37

标签: php arrays

我试图检查数组中是否有另一个数组的值。函数array_key_exist()看起来像我正在搜索的内容,但我不明白如何将函数的键值作为数组给出。这是代码:

$risultato_query_controllo_numero = mysql_query($query_controllo_numero);
$voucher_esistenti = array();

while(($row = mysql_fetch_assoc($risultato_query_controllo_numero))) {
    $voucher_esistenti[] = $row['numero'];
}

用数字填充第一个数组:

$voucher = range($numero, $numero + $quantita);

用数字填充第二个数组。

我现在需要做的是检查$voucher中是否存在$voucher_presenti中的任何值。

3 个答案:

答案 0 :(得分:4)

您可以使用array_intersect功能:

$overlap = array_intersect($voucher, $voucher_presenti); 

您可以在documentation中找到更多示例。

答案 1 :(得分:1)

您可以使用in_array()功能获取您要查找的结果。

$arrayOne = range(1, 10);
$arrayTwo = range(5, 15);
foreach ($arrayOne as $value) {
    if (in_array($value, $arrayTwo)) {
        echo 'value '.$value.' is in the first and second array.<br />';
    }
}

资源

答案 2 :(得分:1)

in_array可以很好地满足您的需求,例如,只有在sql行中有新值时才能分配$ voucher_esistenti。

$risultato_query_controllo_numero=mysql_query($query_controllo_numero);
$voucher_esistenti=array();
while(($row =  mysql_fetch_assoc($risultato_query_controllo_numero))){
    if(!in_array($row['numero'], $voucher_esistenti) {
         $voucher_esistenti[] = $row['numero'];
    }
} // this solution isn't optimal, because you will check subarrays with each new value

通过使用复杂度为O(1)(最佳复杂度:)的hashmap,有更好的方法来实现这一点。)

$risultato_query_controllo_numero=mysql_query($query_controllo_numero);
$voucher_esistenti=array();
while(($row =  mysql_fetch_assoc($risultato_query_controllo_numero))){
// here is what we changed, instead of key = value, we actually append keys
    if(!isset($voucher_esistenti[$row['numero']]) {
        $voucher_esistenti[$row['numero']] = true;
    }
} 
/*
The second implementation is a lot faster due to the algorithm, but you will have to change the reading of $voucher_esistenti array. */