php foreach返回意外结果

时间:2011-10-30 22:33:32

标签: php foreach

我在下面的代码中遇到问题。我想有人告诉我为什么echo $menu;带来意外的0(零)作为结果? $t包含数据,下面我用var_dump向您展示......

<div class="cont_menu">
  <div class="menu">
    <ul>
      <?php
      include_once 'banco_pdo.php';

      $sql = 'SELECT colaborador_menu_cod,colaborador_menu_sup_cod,menu_descr,menu_nivel,menu_titulo,menu_url   FROM colaborador_menu WHERE colaborador_menu_cod in (SELECT colaborador_menu_cod as id FROM menu_por_colaborador WHERE col_cod = :col_cod)';
      $colaborador = $_SESSION["colaborador"];
      try {
          $core = Core::getInstance();
          $stmt = $core->dbh->prepare($sql);
          $stmt->bindParam('col_cod',$colaborador, PDO::PARAM_INT);
          $stmt->execute();
          $t = $stmt->fetchALL(PDO::FETCH_ASSOC);
      } catch (PDOException $e) {
          echo $e->getMessage();
      }
      unset($sql);unset($core);unset($stmt);unset($colaborador);

      if(!empty($t))
      {
          foreach($t as $linha)
          {
              if($linha['menu_nivel'] == 1)
              { $principal[] = $linha; }
              else
              { $subcat[] = $linha; }
          }
          $menu = '';

          foreach($principal as $linha2)
          {
              $menu = $menu + "<li><a class=\"hide\" title=\"".$linha2["menu_titulo"]."\" href=\"#\" style=\"font-weight:bold;\">".$linha2["menu_descr"]."</a><!--[if lte IE 6]><a href=\"#\">".$linha2["menu_descr"]."<table><tr><td><![endif]--><ul>";
              foreach($subcat as $linha3)
              { 
                  if($linha3["colaborador_menu_sup_cod"] == $linha2["colaborador_menu_cod"])
                  {
                      $menu = $menu + "<li><a href=\"".$linha3["menu_url"]."\" title=\"".$linha3["menu_titulo"]."\">".$linha3["menu_descr"]."</a></li>";
                  }
          }
          $menu = $menu + '</ul><!--[if lte IE 6]></td></tr></table></a><![endif]--></li>';
      }
      echo $menu;
  }
  ?>
  </ul>
</div>

这是var_dump变量的$t

array
  0 => 
    array
      'colaborador_menu_cod' => string '1' (length=1)
      'colaborador_menu_sup_cod' => null
      'menu_descr' => string 'CATALOGO' (length=8)
      'menu_nivel' => string '1' (length=1)
      'menu_titulo' => string '#' (length=1)
      'menu_url' => string 'CATALOGO' (length=8)
  1 => 
    array
      'colaborador_menu_cod' => string '2' (length=1)
      'colaborador_menu_sup_cod' => string '1' (length=1)
      'menu_descr' => string 'CATEG. E PROD.' (length=14)
      'menu_nivel' => string '2' (length=1)
      'menu_titulo' => string 'Categoria e Produtos' (length=20)
      'menu_url' => string 'udi_categoria.php?listar=cat_nivel&par=1&op=insert&nivel=1' (length=58)
  2 => 
    array
      'colaborador_menu_cod' => string '3' (length=1)
      'colaborador_menu_sup_cod' => string '1' (length=1)
      'menu_descr' => string 'PROD. S/ CAT.' (length=13)
      'menu_nivel' => string '2' (length=1)
      'menu_titulo' => string 'Produtos sem Categoria' (length=22)
      'menu_url' => string 'prod_sem_cat.php' (length=16)
  3 => 
    array
      'colaborador_menu_cod' => string '4' (length=1)
      'colaborador_menu_sup_cod' => string '1' (length=1)
      'menu_descr' => string 'CARACTERISTICA' (length=14)
      'menu_nivel' => string '2' (length=1)
      'menu_titulo' => string 'Caracteristica de Produtos' (length=26)
      'menu_url' => string 'udi_caracteristica.php?op=insert' (length=32)
  4 => 
    array
      'colaborador_menu_cod' => string '5' (length=1)
      'colaborador_menu_sup_cod' => string '1' (length=1)
      'menu_descr' => string 'MENU' (length=4)
      'menu_nivel' => string '2' (length=1)
      'menu_titulo' => string 'Menus' (length=5)
      'menu_url' => string 'udi_menu.php?listar=menu_nivel&par=1&op=insert&menu_nivel=1' (length=59)
  5 => 
    array
      'colaborador_menu_cod' => string '6' (length=1)
      'colaborador_menu_sup_cod' => string '1' (length=1)
      'menu_descr' => string 'USUARIOS' (length=8)
      'menu_nivel' => string '2' (length=1)
      'menu_titulo' => string 'usuarios' (length=8)
      'menu_url' => string 'udi_usuario.php?op=insert' (length=25)

1 个答案:

答案 0 :(得分:5)

PHP使用.运算符进行字符串连接,而不是+。你有这样的代码:

$menu = $menu + "...some text...";

请改用:

$menu = $menu . "...some text...";

甚至:

$menu .= "...some text...";

+尝试添加两个数字。如果其中一个字符串无法转换为数字,则假定为零。零和零之和为零,因此如果您使用$menu,则+为零。