2012-11-05 150 views
0

我想从用户的输入从文本字段多个值,并希望爆炸或不断加入到如果条件语句PHP:如果与条件foreach循环

这里内爆炸是我的代码

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)

我以前从未做过这种不知道要么这是正确的方式或者其他更好的方式。

非常感谢

回答

1

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

$categories = array(8, 4); 

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

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

您应该使用上面,但我想给你它是如何工作的想法,所以你可以理解为更复杂的问题的原则:

函数存在($目标,$阵列){ ($ element as $ element){//遍历数组中的每个元素 if($ element == $ target){//检查是否有任何元素存在您正在搜索的内容 return true; //返回true,确实存在,并停在那里。 } 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... 
} 

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

希望它足够清楚:)

+0

非常感谢您的详细描述和理解。欣赏。我现在正试图理解并回复你。是的,我正在使用窗体(输入字段)来获取ID,所以用户可以添加像'1,5,10,52 .....' –

+0

@pixelngrain不客气:)我更新了答案,检查是否很明显! – jadkik94

+0

伟大的帮助和解释。非常感谢,工作正常。 –

1

你可能会与in_array()最好检查针对的可能性可变数量的值。

+0

感谢您的快速帮助。你能给我举个例子吗? –

1

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

$string = "5, 6, 7, 8, 10"; 

之后,要检查是否“CATID”不是该数组中,如果它是不是你想要运行$这个 - > list_post ($项目);

如果是这样,那么你应该使用这样的事情:

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

希望它能帮助。

+0

感谢Dygestro为您的代码。我会检查并回复你 –

+0

你的答案是明确的解决方案,但'jadkik94'给出了一些细节知识。我感谢您的帮助和努力。 - 坦克很多 –

+0

当然,很高兴我能帮上忙。 – Dygestor