简体   繁体   中英

php foreach returning an unexpected result

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)

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM