在我的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 ?";
}
}
?>但是这是,所以代码毫无价值,因为在更新或插入时花费了相当长的时间。
是否有更好的函数,即如果主数组中存在从数组中的值,可以更快地检查?
从从数组中,我指的是=>列表/的数组用户输入值。 从主数组中,我指的是的=>列表,它将数组值存储在页面中。
谢谢
发布于 2013-07-31 00:35:34
我想我对比较有更好的选择。
在将此代码放入产品页面之前,请让我知道我在下面做了什么错事:-非常感谢您的努力,@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));
}
?>我的代码更好吗?我正在本地主机上测试它--我看不出有什么区别,我只是想知道专家的观点--,如果我在乱搞什么?在我把这段代码放到生产页面之前。
更新:这看起来比所讨论的代码更好,速度更快。
谢谢
发布于 2013-07-30 23:22:09
唯一能做到这一点的方法是使用一个以值作为键的关联数组(嗯,您可以为此专门定制另一个存储容器,但这会使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
}
}https://stackoverflow.com/questions/17959071
复制相似问题