您应该有某种要检查的类别 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...
}
然后您可以像前面所示那样使用它,但请记住,这只是一个示例,您甚至可能不需要所有这些步骤,并且有更有效的方法来处理此输入(例如正则表达式)。但这里关心的不是清理输入,而是请记住,您最终需要这样做。
希望它足够清楚:)