我试图从文本字段的用户输入中获取多个值,并希望在条件语句中爆炸或继续添加
这是我的代码
foreach ($list['post'] as $item) {
if( ($item['single']['catid'] != 8) AND ($item['single']['catid'] != 4) ){
$this->list_post($item);
}
}
现在我正在寻找的是if( ($item['single']['catid'] != 8) AND ($item['single']['catid'] != 4) )
我希望允许用户添加多个类别ID,每个ID都会添加AND
以及进一步的ID代码AND ($item['single']['catid'] != 4)
我以前从未这样做,也不知道这是正确的做法还是其他任何可能更好的方法。
非常感谢
答案 0 :(得分:1)
最好使用in_array()
来检查可变数量的可能值。
答案 1 :(得分:1)
我不确定我理解你的问题。您希望用户能够输入不同的值,例如:
$string = "5, 6, 7, 8, 10";
之后,您要检查'catid'是否不在该数组中,如果不是,您想要运行$ this-> list_post($ item);
如果是这样,那么你应该使用这样的东西:
$values = explode(", ", $string); //make array from values
foreach ($list['post'] as $item) {
if (!in_array($item['single']['catid'], $values)) { //check whether catid is in array
$this->list_post($item); // execute whatever you want
}
}
希望它有所帮助。
答案 2 :(得分:1)
您应该拥有某种要检查的类别ID数组,例如:
$categories = array(8, 4);
然后你可以使用PHP的in_array(needle, haystack)
内置函数。
你的if条件会变成那样:if (!in_array($item['single']['catid'], $categories)) {
。
你应该使用上述内容,但我会告诉你它是如何工作的,所以你可以理解更复杂问题的原理:
函数存在($ target,$ array){ foreach($ array as $ element){//遍历数组中的每个元素 if($ element == $ target){//检查是否有任何元素存在您要搜索的内容 返回true; //返回true,确实存在,然后停在那里。 } else { //忽略它...... } } 返回false; //如果你到了这里,这意味着什么都没有返回,所以它不存在...... }
用作if (exists($item['single']['catid'], $categories)) {
。
如果它是"内部"它将无法工作。 if语句,因为在评估它是否存在之前必须进行一些处理。所以你可以在if
语句之前完成它,并将结果存储在变量中,或者使用一个函数(PHP提供)。
希望这个概念可以帮助你解决更复杂的问题...
注意:这假设您的输入采用数组形式,如果不是直接提供的话,可以通过各种方式构建。
<强>更新强>:
通过输入字段获得的输入通过表单发送,您指定POST或GET作为方法。假设您正在使用POST,这就是您在文本字段中输入作为字符串的输入方式:
$categories_string = $_POST['the_name_field_in_the_input_tag'];
之后你必须把它理解为一个项目列表,让我们用逗号分隔:1,3,5,8
。然后这只是用逗号分隔。您可以使用explode($delimiter, $string)
。像那样:
$categories_array = explode(',', $_POST['categories']);
但是你不能相信输入,所以你可以获得像1, 2, 3,5,6
这样的东西。这些空间会让它变得混乱,因为你周围会有空间。要删除它们,您可以使用trim
作为示例。
$categories = array(); // Create the array in which the processed input will go
foreach ($categories_array as $c) { // Go through the unprocessed one
$categories[] = trim($c) * 1; // Process it, and fill the result. The times one is just so that you get numbers in the end and not strings...
}
然后您可以使用它,如前所示,但请记住,这只是一个示例,您可能甚至不需要所有这些步骤,并且有更有效的方法来处理此输入(例如正则表达式) 。但这里的问题并不是消毒输入,但请记住,最终你需要这样做。
希望它足够清楚:)