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

时间:2013-07-30 23:14:01

标签: php arrays

在我的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 ?";
    }
}

?>

但这是如此毫无价值的代码,因为在更新或插入时需要很长时间

是否任何更好的功能,如果主数组中存在从属数组中的值,检查会更快吗?

  

来自从属数组我的意思是=&gt;列表/数组用户输入值

     

来自主数组我的意思是=&gt;页面中我存储的数组值的列表。

由于

2 个答案:

答案 0 :(得分:1)

我认为我使用array_diff获得了更好的选择。

在我将此代码放入生产页面之前,请告诉我如果我在下面做错了什么: - 非常感谢您的努力@ J.David Smith&amp; @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中进行测试我没有看到太大的区别,我只是想知道专家意见如果我搞乱了什么?在将此代码放入生产页面之前。

更新:这看起来比相关代码更好,更快。

由于

答案 1 :(得分:0)

唯一的另一种方法是使用一个关联数组,将您的值作为键(嗯,您可以专门为此自定义实现另一个存储容器,但这样做太过分了)。然后,您可以查看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多个项目),那么可能更快。 Hashing已经非常快,因此您必须对代码进行基准测试才能做出决定。

$masterArray = array(...); // either style of definition will work; i'll use yours for simplicity

foreach($masterArray as $value) {
    if(isset($_POST[$value])) {
        // do stuff
    }
}