【问题标题】:PHP: If condition with explode within foreach loopPHP:如果条件在foreach循环内爆炸
【发布时间】:2012-11-05 16:57:53
【问题描述】:

我正在尝试从文本字段的用户输入中获取多个值,并且想要扩展或继续添加到 if 条件语句中

这是我的代码

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)

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

非常感谢

【问题讨论】:

    标签: php foreach explode


    【解决方案1】:

    您应该有某种类型的要检查的类别 ID 数组,例如:

    $categories = array(8, 4);
    

    然后你可以使用类似in_array(needle, haystack) PHP 的内置函数。

    你的 if 条件会变成这样:if (!in_array($item['single']['catid'], $categories)) {

    您应该使用上述方法,但我将让您了解它的工作原理,以便您了解更复杂问题的原理:

    函数存在($target, $array) { foreach ($array as $element) { // 遍历数组中的每个元素 if ($element == $target) { // 检查是否有任何元素存在您要搜索的内容 返回真; // 返回真,它确实存在,并停在那里。 } 别的 { // 忽略它... } } 返回假; // 如果你到了这里,就意味着什么都没有返回 true,所以它不存在... }

    用作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...
    }
    

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

    希望它足够清楚:)

    【讨论】:

    • 非常感谢您的详细描述和理解。欣赏。我现在正在努力理解并回复你。是的,我正在使用表单(输入字段)来获取 ID,因此用户可以添加类似 1, 5, 10, 52..... 的内容
    • @pixelngrain 不客气 :) 我更新了答案,看看是否清楚!
    【解决方案2】:

    in_array() 可能会更好,因为它可以根据可变数量的可能性检查一个值。

    【讨论】:

    • 感谢您的快速帮助。能给我举个例子吗?
    【解决方案3】:

    我不确定我是否理解您的问题。您希望用户能够输入不同的值,例如:

    $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
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • 感谢 Dygestro 提供您的代码。我会检查并回复你
    • 您的答案是明确的解决方案,但jadkik94 提供了一些细节知识。感谢您的帮助和努力。 --坦克很多
    • 当然可以,很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多