的foreach循环,并声明如果

问题描述:

我有一个通过阵列应该循环,但不输出这个foreach语句:的foreach循环,并声明如果

[复选框]东西在这里

这反而输出这样的:

[复选框] [复选框]这里的东西

基本上,if语句不会被跳过,但foreach循环正在查看我的数组中的值(在这种情况下,我只有2用于测试目的)和处理他们在同一时间代替分开。我做了一些回声测试,这就是发生了什么,但为什么?

$ blogID将拥有数组值56,57,因为循环同时处理两个值,所以if语句中的两个选项都变为true,因为56等于56,但56不等于57第二遍,所以它会将if语句的后半部分处理为真。这很奇怪,我以前从未有过这种情况。

下面是代码:

$getblog = mysql_query("SELECT * FROM content WHERE blogID = '{$_REQUEST['id']}' AND type = '5' ORDER BY `order` ASC"); 
while ($row = mysql_fetch_assoc($getblog)){ 
$blogID = $row['id'];  
$tempData[$blogID][] = $row; 

$data = $_REQUEST['blogIDS']; 
$ids = explode(",", $data); 

foreach($ids as $blogIDS) { 
    $getblogids = mysql_query("SELECT * FROM content WHERE id = '$blogIDS' AND type = '5' ORDER BY `order` ASC"); 
    while ($row2 = mysql_fetch_assoc($getblogids)){ 
     $blogIDS = $row2['id'];  
     $tempData2[$blogIDS][] = $row2; 
    } 
} 
    if ($row['id'] == $blogIDS) { 
      echo "<input type='checkbox' name='ids[]' value='{$row['id']}' checked='yes'/>\n"; 
    } else { 
      echo "<input type='checkbox' name='ids[]' value='{$row['id']}'/>\n"; 
    } 

    echo "<a class='heriyah_text1' href='manage_blogposts_add.php?resize=1&edit=1&id={$row['id']}&blogID={$_REQUEST['id']}&pageID={$_REQUEST['pageID']}&div={$_REQUEST['div']}'>{$row['title']}</a><p></p>\n"; 
} 
+0

哪里*的东西在这里*部分?另外,你的'elseif'是完全多余的。只需使用'else {echo ...' – Phil 2012-03-06 02:45:59

+2

上面的代码将始终按顺序输出两个复选框。请张贴更多的周边代码,因为不清楚这里有什么问题。发布了 – 2012-03-06 02:46:10

+0

,我不确定那部分是否需要,但是现在它已经起来了!感谢问! =) – drummer392 2012-03-06 02:48:59

编辑。试试这个,让我知道:

$getblog = mysql_query("SELECT * FROM content WHERE blogID = '{$_REQUEST['id']}' AND 
         type = '5' ORDER BY `order` ASC"); 
while ($row = mysql_fetch_assoc($getblog)){ 
    $blogID = $row['blogID'];  
    $tempData[$blogID][] = $row; 
} 

$data = $_REQUEST['blogIDS']; 
$ids = explode(",", $data); 

foreach($ids as $blogID) { 
    if (array_key_exists($blogID, $tempData)) { 
     foreach($tempData[$blogID] as $key => $value) { 
      if ($value['blogID'] == $blogID) { 
       echo "<input type='checkbox' name='ids[]' value='{$value['id']}' checked='yes'/>\n"; 
      } else { 
       echo "<input type='checkbox' name='ids[]' value='{$value['id']}'/>\n"; 
      } 

      echo "<a class='heriyah_text1' href='manage_blogposts_add.php?resize=1&edit=1&id={$value['id']}&blogID={$_REQUEST['id']}&pageID={$_REQUEST['pageID']}&div={$_REQUEST['div']}'>{$value['title']}</a><p></p>\n"; 
     } 
    } 
} 
+0

这不会使任何数据显示出来。我希望我只能向您显示该页面,但它位于CMS CMS的管理面板中。我会继续讨论它。 $ blogID值是否被改变了很多?你有'$ ids作为$ blogID'这意味着一件事,但是我们有$ tempData [$ blogID]'意味着别的东西。 – drummer392 2012-03-08 14:51:17

+0

好吧我已经得到了一切,现在显示出来,但它仍然使所有东西加倍。我只是改变了一些价值观,看看我是否搞砸了,我只是会把它发布在我原来的问题中,如果这对你有好处。 – drummer392 2012-03-08 14:59:36

+0

我使用$ blogID作为$ tempData中的一个键。当你迭代你的id时,你正在访问$ tempData中的特定键。你需要在$ tempData中检查$ blogID,否则这与真正的第一个答案没有什么不同。你已经编辑你的原始帖子来迭代使用$ bID,而不是像以前那样产生相同的结果。 – ryank 2012-03-08 16:05:08

你可以这样做一个相反:

$getblog = mysql_query("SELECT * FROM content WHERE blogID = '{$_REQUEST['id']}' AND 
        type = '5' ORDER BY `order` ASC"); 
while ($row = mysql_fetch_assoc($getblog)){ 
    $tempData[] = $row; 
} 

$data = $_REQUEST['blogIDS']; 
$ids = explode(",", $data); 

foreach($ids as $blogID) { 
    foreach($tempData as $key => $value){ 
     if($value['id'] == $blogID){ 
     echo "<input type='checkbox' name='ids[]' value='{$value['id']}' checked='yes'/>\n"; 
     }else{ 
     echo "<input type='checkbox' name='ids[]' value='{$value['id']}'/>\n"; 
     } 

     echo "<a class='heriyah_text1' href='manage_blogposts_add.php?resize=1&edit=1&id={$value['id']}&blogID={$_REQUEST['id']}&pageID={$_REQUEST['pageID']}&div={$_REQUEST['div']}'>{$value['title']}</a><p></p>\n"; 
    } 
} 
+0

嗯,这摆脱了复选框加倍。是否因为foreach在while循环中? – drummer392 2012-03-06 04:11:02

+0

这是造成这种情况发生的原因,虽然我可以弄明白,但也许你可以帮我解决问题。 [点击这里查看屏幕截图](http://www.brockpatterson.com/screen.png) – drummer392 2012-03-06 04:14:05

+0

@ drummer392,这是由于它在while循环内造成的。让我想想你遇到的最新的代码问题。基本上它应该只显示1到4的博客文章吧? – denil 2012-03-06 04:52:12