PHP:如果条件在foreach循环中爆炸

时间:2012-11-05 16:57:54

标签: php foreach explode

我试图从文本字段的用户输入中获取多个值,并希望在条件语句中爆炸或继续添加

这是我的代码

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)

我以前从未这样做,也不知道这是正确的做法还是其他任何可能更好的方法。

非常感谢

3 个答案:

答案 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...
}

然后您可以使用它,如前所示,但请记住,这只是一个示例,您可能甚至不需要所有这些步骤,并且有更有效的方法来处理此输入(例如正则表达式) 。但这里的问题并不是消毒输入,但请记住,最终你需要这样做。

希望它足够清楚:)