Sequenced array within dropdown

Asked

Viewed 82 times

4

Guys, I have a code that prints the arrays if I set the values, but I would like that sequence to be automatic. Let me show you so it’s clear.

<?php

  $busca_produtos = new Produto;
  $produto = $busca_produtos->busca_todos_produtos();

  $busca_desc = new Produto;
  $desc_produto = $busca_produtos->busca_desc();

 ?>

In this code above it pulls the values of the correct arrays; below, I print the values:

 <datalist class="" id="browsers" >
    <option value="<?php echo $produto[0]['cod_produto']; ?>"><?php echo $desc_produto[0]['desc_produto'] ;?></option>
    <option value="<?php echo $produto[1]['cod_produto']; ?>"><?php echo $desc_produto[1]['desc_produto'] ;?></option>
    <option value="<?php echo $produto[2]['cod_produto']; ?>"><?php echo $desc_produto[2]['desc_produto'] ;?></option>
    <option value="<?php echo $produto[3]['cod_produto']; ?>"><?php echo $desc_produto[3]['desc_produto'] ;?></option>   
 </datalist>

As you can see, I had to value the array. The problem is that if I put, example, $product[5345]['cod_product'], obviously an error will appear, because line 5345 does not exist in the bank.

My question is: is there any way that I can pull ALL the values of the bank and print them in the options separately without having to specify the line that it is on? As if each array value were a datalist option?

  • Makes a SELECT of all values in DB and uses a foreach to iterate over all the results giving print on them.

3 answers

5


Using a foreach and an accountant $i

<datalist class="" id="browsers" >
    <?php 
       $i = 0;   // declaração do contador
       foreach($produto as $p){
    ?>
          <option value="<?php echo $p['cod_produto']; ?>"><?php echo $desc_produto[$i]['desc_produto'] ;?></option>
    <?php
          $i++; // incremento do contador
       }        // fim do foreach
    ?>
</datalist>
  • It would be easier to use one for normal if it’s to maintain a $i incremental. Or use one foreach with array_map to join the two arrays. Ex.: foreach(array_map(null, $produto, $desc_produto) as $p) {...}

  • 1

    I used your code! Thank you very much, young man.

4

Try something +/- like this

<datalist class="" id="browsers" >
  <?php 
  $x = 0; 

  // No lugar de 10 coloca o tamanho máximo retornado na sua busca
  while ($x <= 10) {
    echo "<option value=" . $produto[$x]['cod_produto'] . $desc_produto[$x]['desc_produto'] . "</option>";
    $x++;
  };
  ?> 
</datalist>
  • If there is no return from the database your code will give error. Just use while instead of do..while.

  • True, I didn’t notice that, I corrected thank you!

  • Thank you!!! It worked just right!

  • @Silviademarchi Don’t forget to mark my answer as accepted, in case it was her you used!

1

In this case I prefer to use the for:

<datalist class="" id="browsers" >

<?php 
for($i = 0; $i < count($produto); $i++):
?>

<option value="<?php echo $produto[$i]['cod_produto']; ?>"><?php echo $desc_produto[$i]['desc_produto'] ;?></option>

<?php 
endfor;
?>

 </datalist>

But all answers are correct.

The line commented below is unnecessary in your code.

  $busca_produtos = new Produto;
  $produto = $busca_produtos->busca_todos_produtos();

  // $busca_desc = new Produto; // <-- esta linha não é necessária
  $desc_produto = $busca_produtos->busca_desc();
  • 1

    In such cases I like to use the alternative syntax of the structures. Like the for: ... endfor;. I find illegible a } lost in the middle of the code.

  • @fernandosavio yes! Codes "noodles" are no longer very friendly right... Even more using }

  • 1

    That’s right, thank you so much for warning!

  • @Sílviademarchi no problem.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.