首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PHP快速检查主数组中是否存在从数组中的值,而不需要循环

通过PHP快速检查主数组中是否存在从数组中的值,而不需要循环
EN

Stack Overflow用户
提问于 2013-07-30 23:14:00
回答 2查看 157关注 0票数 0

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

代码语言:javascript
复制
<?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 ?";
    }
}

?>

但是这是,所以代码毫无价值,因为在更新或插入时花费了相当长的时间。

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

从数组中,我指的是=>列表/的数组用户输入值。 从主数组中,我指的是的=>列表,它将数组值存储在页面中。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 00:35:34

我想我对比较有更好的选择。

在将此代码放入产品页面之前,请让我知道我在下面做了什么错事:-非常感谢您的努力,@J.David Smith & @grossvogel

代码语言:javascript
复制
<?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));
    
    }

?>

我的代码更好吗?我正在本地主机上测试它--我看不出有什么区别,我只是想知道专家的观点--,如果我在乱搞什么?在我把这段代码放到生产页面之前。

更新:这看起来比所讨论的代码更好,速度更快。

谢谢

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 23:22:09

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

代码语言:javascript
复制
$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+项),这可能会更快。散列已经非常快了,因此您必须在代码上对其进行基准测试,才能做出决定。

代码语言:javascript
复制
$masterArray = array(...); // either style of definition will work; i'll use yours for simplicity

foreach($masterArray as $value) {
    if(isset($_POST[$value])) {
        // do stuff
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17959071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档