php - How to unset foreach loop main array (the one is being iterated) inside the loop itself? -


i have 2 foreach loops below.

the idea process type 2 before type 1 in order. code below works fine wondering how can use unset achieve same result instead of using array $processed keep track of processed.

i know php foreach clones/copies $data array iteration. in other words, possible unset type 2 $data in second foreach loop , somehow first foreach loop skip them?

i know php foreach clones/copies array iteration.

  $data = array(     array('type' => 1),     array('type' => 2),     array('type' => 2),     array('type' => 2),     array('type' => 1),     array('type' => 2),     array('type' => 2), );  $processed = array(); foreach ($data $firstkey => $firstvalue) {      if (in_array($firstkey, $processed)) {         continue;     }      foreach ($data $secondkey => $secondvalue) {         if ($secondvalue['type'] == 2) {             echo $secondvalue['type'] . " processed " . "<br/>";             $processed[] = $secondkey; // can use unset here?         }     }      echo $firstvalue['type'] . " processed" . "<br/>"; } 

update update can intention out.

each child has reference parent. children need processed before parent. code below should work fine. can try , output of code below desired behavior. unset if possible.

$data = array(     array('id' => 1, 'ref' => null, 'name' => 'parent 1'),     array('id' => 2, 'ref' => 1, 'name' => 'child 1'),     array('id' => 3, 'ref' => 1, 'name' => 'child 2'),     array('id' => 4, 'ref' => 1, 'name' => 'child 3'),     array('id' => 5, 'ref' => null, 'name' => 'parent 2'),     array('id' => 6, 'ref' => 5, 'name' => 'child 1'),     array('id' => 7, 'ref' => 5, 'name' => 'child 2'),     array('id' => 8, 'ref' => null, 'name' => 'parent 3'),     array('id' => 9, 'ref' => 8, 'name' => 'child 1'),     array('id' => 10, 'ref' => 8, 'name' => 'child 2'), );  $processed = array(); foreach ($data $ref => $firstvalue) {      if (in_array($ref, $processed)) {         continue;     }      foreach ($data $secondkey => $secondvalue) {         if ($secondvalue['ref'] == $firstvalue['id']) {             echo $secondvalue['id'] . "- " . $secondvalue['name'] . " processed " . "<br/>";             $processed[] = $secondkey;         }     }       echo $firstvalue['id'] . "- " . $firstvalue['name'] . " processed" . "<br/>";     echo "<hr/>"; } 

code above output:

2- child 1 processed  3- child 2 processed  4- child 3 processed  1- parent 1 processed 6- child 1 processed  7- child 2 processed  5- parent 2 processed 9- child 1 processed  10- child 2 processed  8- parent 3 processed 

here's simpler version doesn't require unsetting anything. tests type. each type 1 entry, processes type 2 entries first, processes type 1 entry.

<?php  $data = array(               array('type' => 1),               array('type' => 2),               array('type' => 2),               array('type' => 2),               array('type' => 1),               array('type' => 2),               array('type' => 2),               );  foreach ($data $firstkey => $firstvalue) {     if ($firstvalue['type'] == 1) {         foreach ($data $secondkey => $secondvalue) {             if ($secondvalue['type'] == 2) {                 echo $secondvalue['type'] . " processed " . "<br/>";             }         }         echo $firstvalue['type'] . " processed" . "<br/>";     } } 

another way this, doesn't require testing types in inner loops, make 2 arrays: $datatype1 contains type 1 entries in $data, , $datatype2 contains type 2 entries. use simple nested loops:

foreach ($datatype1 $firstvalue) {     foreach ($datatype2 $secondvalue) {         echo $secondvalue['type'] . " processed " . "<br/>";     }     echo $firstvalue['type'] . " processed" . "<br/>"; } 

Comments

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -