是否有任何有效的方法可以相互检查这些多个变量值?
示例:如果$v1
的值为 abc 且$v2
的值为 abc 且其他变量为空,则返回错误,因为两个值相同。
另一个示例:如果$v1
的值为 abc 且$v4
的值为 abc 且其他变量为空,则返回错误,因为两个值相同。
比如检查每个变量与其他变量,如果它与任何人相同,则返回错误。
$v1 = $_POST['v1'];
$v2 = $_POST['v2'];
$v3 = $_POST['v3'];
$v4 = $_POST['v4'];
$v5 = $_POST['v5'];
$v6 = $_POST['v6'];
答案 0 :(得分:1)
将它们作为关键字放入assoc数组,然后检查它的len。
$vars = [];
$keys = ['v1', ..., 'v6'];
foreach ($keys as $k) {
$vars[$_POST[$k]] = true;
}
if (count($vars) != count($keys)) {
echo 'Duplicates found!';
}
说明:
$_POST = [
'v1' => 'abc',
'v2' => 'cde',
'v3' => 'abc',
]
$vars = [];
$keys = ['v1', 'v2', 'v3'];
// 1st foreach iteration:
$vars['abc'] = true; // $vars = ['abc' => true];
// 2nd foreach iteration:
$vars['cde'] = true; // $vars = ['abc' => true, 'cde' => true];
// 3rd foreach iteration:
$vars['abc'] = true; // Again 'abc'! $vars is still ['abc' => true, 'cde' => true];
print_r(count($vars) == count($keys)); // 2 == 3
此算法的复杂度为O(n)
,如果最后一个使用排序,则使用array_unique()
可能为O(n*log(n))
。
答案 1 :(得分:1)
$v1 = 1;
$v2 = 2;
$v3 = 3;
$v4 = 4;
$v5 = 5;
$v6 = 5;
$values = [$v1, $v2, $v3, $v4, $v5, $v6];
if (count($values) !== count(array_unique($values))) {
echo 'Duplicates found';
}
<强> DEMO 强>
您可以轻松使用array_count_values函数来确定哪些值是重复的。 我把它放在这里:http://phpio.net/s/16bh
答案 2 :(得分:0)
我添加了评论,如果你不明白的话可以随意问一下,希望它会帮助你理解这个:)
<?php
$f1 = 'abc';
$f2 = 'ac';
$f3 = 'abc';
$t1 = 'b';
$t2 = 'a';
$t3 = 'abc';
// push to array
$array_f[] = $f1;
$array_f[] = $f2;
$array_f[] = $f3;
$array_t[] = $t1;
$array_t[] = $t2;
$array_t[] = $t3;
// count($array_f) returns number of elements in array and array_unique removes duplicates from array
// so if the length of original array is same as array without duplicates, then there weren´t duplicates else there were
if(count($array_f) === count(array_unique($array_f))) echo 'array_t is unique return true</br>';
else echo 'array_t is not unique return false</br>';
if(count($array_t) === count(array_unique($array_t))) echo 'array_f is unique return true</br>';
else echo 'array_ fis not unique return false</br>';
?>
答案 3 :(得分:0)
我认为去这里的方法是使用array_unique:
<?php
$array = array($_POST['v1'], $_POST['v2'], $_POST['v3'], $_POST['v4'], $_POST['v5'], $_POST['v6']);
$array_unique = array_unique($array);
if ($array_unique == $array) {
// No duplicates
} else {
// duplicates
}
?>
编辑:如果您只想要非空的$_POST
值:
<?php
$array = array();
if ($_POST['v1'] != '')
$array[] = $_POST['v1'];
if ($_POST['v2'] != '')
$array[] = $_POST['v2'];
if ($_POST['v3'] != '')
$array[] = $_POST['v3'];
if ($_POST['v4'] != '')
$array[] = $_POST['v4'];
if ($_POST['v5'] != '')
$array[] = $_POST['v5'];
if ($_POST['v6'] != '')
$array[] = $_POST['v6'];
if (count($array) < 2) {
// Zero or one element in the array
} else {
$array_unique = array_unique($array);
if ($array_unique == $array) {
// No duplicates
} else {
// duplicates
}
}
?>
(当然,可以使用for
循环增强阵列构建)
在此处查看:https://eval.in/683045
答案 4 :(得分:0)
$filtered = array_reduce(array_keys($_POST), function($carry, $key){
// get all v[0..9]* variables from post
if (preg_match('^/v\d+$/i',$key)) {
$carry[$key]=$_POST[$key];
}
return $carry;
}, array());
$checked = array_unique($filtered);
$hasDuplicates = count($filtered) != count($checked);
另一个版本(如果你需要检查确切的POST键)
$keys = array('v1','v2','v3');
$filtered = array_intersect_keys($_POST, array_flip($keys));
$checked = array_unique($filtered);
$hasDuplicates = count($filtered) != count($checked);