Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Print out something only when value is within specific group during loop in PHP

I have a big array that is being used throughout the site and changing its structure just for the following task would be a pain. I want to make several select boxes with another array. The output I want to get is like this:

/* Example Array:

  $allAnimals = array("Frogs","Toads","Bats","Elephants","Rats","Seals",
                      "Crocodilians","Turtles");

  $group = array("Frogs"=>"Amphibian","Bats"=>"Mammal","Crocodilians"=>"Reptile");
*/

<select name='Amphibian'>
   <option value='0'>Frogs</option>
   <option value='1'>Toads</option>
</select>

<select name='Mammal'>
   <option value='2'>Bats</option>
   <option value='3'>Elephants</option>
   <option value='4'>Rats</option>
   <option value='5'>Seals</option>
</select>

<select name='Reptile'>
   <option value='6'>Crocodilians</option>
   <option value='7'>Turtles</option>
</select>

I can't figure out how to print out the options only when the value is within the specific animal group during each iteration of $group. I have tried each() to get the next animal $endAnimal from $group and then break the internal loop if $animal matches the $endAnimal, but I also need to make the loop start printing options at specific values.

<?php

 $allAnimals = array("Frogs","Toads","Bats","Elephants","Rats","Seals","Crocodilians","Turtles");

$group = array("Frogs"=>"Amphibian","Bats"=>"Mammal","Crocodilians"=>"Reptile");

foreach($group as $thisAnimal=>$category){

   $nextKey = (each($group));

   $endAnimal = $nextKey['key'];

   print "<select name='$category'>";

   foreach($allAnimals as $idx=>$animal){

      print "<option value='$idx'>$animal</option>";

      if($endAnimal === $animal){
          break;
      } 
   }

   print "</select>";

}

?>
like image 804
RedGiant Avatar asked Mar 09 '26 23:03

RedGiant


2 Answers

Please check this out:-

 <?php

 $allAnimals = array("Frogs","Toads","Bats","Elephants","Rats","Seals","Crocodilians","Turtles");

$group = array("Frogs"=>"Amphibian","Bats"=>"Mammal","Crocodilians"=>"Reptile");

$group_keys = array_keys($group); // get the keys of group array
$j = 0;
foreach($group_keys as $key => $group_k){
   print "<select name='$group[$group_k]'>";
   if(isset($group_keys[$key+1])){
    $new_value = $group_keys[$key+1];
   }else{
       $new_value = '';
   }
   if($new_value ==''){
      foreach($allAnimals as $key => $allAnm){
        print "<option value='$j'>$allAnm</option>";
        unset($allAnimals[$key]);
        $j ++;
      }
   }else{

        $key_from = array_search($new_value,$allAnimals);

       for($i = 0; $i<$key_from; $i++){
            print "<option value='$j'>$allAnimals[$i]</option>";
            unset($allAnimals[$i]);
            $j ++;

       }
   }

   $allAnimals = array_values($allAnimals);
   print "</select>";
}

Output:- https://eval.in/379462 (eval.in)

local end :- (for better showing) :- http://prntscr.com/7fmtbi

like image 98
Anant Kumar Singh Avatar answered Mar 11 '26 13:03

Anant Kumar Singh


Array of Array is the solution I think

$group = array( "Amphibian" => array("Frogs", "Toads"), "Mammal" => array("Bats", "Elephants", "Rats", "Seals"), "Reptile" => array("Crocodilians", "Turtles") );

foreach($group as $thisAnimal=>$category){

   print "<select name='$category'>";

   foreach($category as $idx=>$animal){
      print "<option value='$idx'>$animal</option>";
   }
   print "</select>";

}
like image 38
Dickens A S Avatar answered Mar 11 '26 14:03

Dickens A S



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!