我试图检查数组中是否有另一个数组的值。函数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
中的任何值。
答案 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. */