dongmeng2509 2011-10-30 22:33
浏览 22
已采纳

php foreach返回意外结果

I'm having problems with this code below. I would like someone tell me why the echo $menu; is bringing the unexpected 0 (zero) as result? $t is with data, below i took a var_dump to show you...

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

This is the var_dump of the $t variable:

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条回答 默认 最新

  • dongyou6795 2011-10-30 22:37
    关注

    PHP uses the . operator for string concatenation, not +. You have some code like this:

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

    Use this instead:

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

    Or even:

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

    + tries to add two numbers. If either of the strings cannot be converted to numbers, zero is assumed. The sum of zero and zero is zero, so $menu is zero if you use +.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错