检查从数组中的值是否存在于主数组中通过PHP快速无循环


Checking if value in slave array exists in master array Quickly without loop via PHP

在我的PHP应用程序中。我从用户那里获取值,所有这些用户值都存储在Array中。只是为了验证。我正在将用户输入值与我的数组进行比较。:-

<?php
// Current Code
$masterArray = array(......); // ..... represents some 60-100 different values.
foreach($_POST as $key => $value) {
    if(in_array($value, $masterArray)) {
        $insertQuery = $mysqli->query("INSERTION stuff or Updating Stuff");
    } else {
        echo "Are you tampering html-form-data ?";
    }
}
?>

但这是非常没有价值的代码,因为在更新或插入时需要相当长的时间

如果从数组中的值存在于主数组中,是否有更好的函数可以更快地检查?

从阵列i均值=>用户输入值的列表/阵列。

主数组,我的意思是=>存储在页面中的我的数组值的列表

感谢

我想我用array_diff得到了更好的选择。

在我将此代码放入生产页面之前,如果我在下面做了什么错事,请告诉我:-非常感谢你的努力@J.David Smith&grossvogel

<?php
    $masterArray = array(.......); // My Master Array List
    $result = array_diff($_POST['checkBox'], $masterArray);
    
    if(count($result) > 0) {
        // If they are trying to do some tampering , let them submit all again. 
        echo 'Something is not Right';
    } else {
        // If Person is genuine, no waiting just insert them all    
        $total = count($_POST['checkBox']);
        $insertQuery = "INSERT into notes(user,quote) values ";
        for($i=0;$i<=$total; $i++) { 
            array_push($values, "('someuser','".$mysqli->real_escape_string($_POST['checkBox'][$i])."')"); 
        }
        $finalQuery = $mysqli->query($insertQuery.implode(',', $values));
    
    }
?>

我的代码更好吗?我正在localhost中测试它,我看不出有多大区别,我只是想知道专家的看法如果我在搞什么?在我将此代码放入生产页面之前。

更新:这看起来比有问题的代码更好、更快。

感谢

实现这一点的唯一其他方法是使用一个将值作为键的关联数组(好吧,您可以专门为此定制另一个存储容器,但这会过度使用imo)。然后,您可以使用isset进行检查。例如:

$masterArray = array(....); // same thing, but with values as keys instead of values
foreach($_POST as $key => $value) {
    if(isset($masterArray[$value])) {
        // do stuff
    } else {
        // do stuff
    }
}

我有点好奇这样做到底有什么意义,尤其是考虑到您的echo调用打印的声明。也许还有比这更好的方法来实现你的目标。

编辑:grossvogel提出的另一种方法:在$masterArray上循环,而不是在$_POST上循环。如果您希望$_POST始终是一个大数据集(即大多数时候人们会选择50多个项目),则此可能会更快。哈希已经很快了,所以你必须在代码中对其进行基准测试才能做出决定。

$masterArray = array(...); // either style of definition will work; i'll use yours for simplicity
foreach($masterArray as $value) {
    if(isset($_POST[$value])) {
        // do stuff
    }
}