0

我正在尝试从文本字段的用户输入中获取多个值,并且想要扩展或继续添加到 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)

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

非常感谢

4

3 回答 3

1

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

于 2012-11-05T16:59:28.937 回答
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
    }
}

希望能帮助到你。

于 2012-11-05T17:07:08.440 回答
1

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

$categories = array(8, 4);

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

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

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

function exists($target, $array) { foreach ($array as $element) { // 遍历数组中的每个元素 if ($element == $target) { // 检查是否存在任何元素正在寻找返回真;// 返回真,它确实存在,并停在那里。} else { // 忽略它... } } return false; // 如果你到了这里,就意味着什么都没有返回 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...
}

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

希望它足够清楚:)

于 2012-11-05T17:08:09.713 回答