We might consider foreach to be painful and a headache while using it to deal with thousands or millions of records. Even more so if we have a nested foreach.
For example,
foreach ($parent as $parentData) {
    // few conditional added here
    $parentObj = $this->extract();
    foreach ($chilren as $childrenData) {
        if ($childrenData['id'] === $parentData['id']) {
            $childrenObj = $this->extract();
            $parentObj->setData($childrenObj);
            // and even more evil things come here....
        }
    }
    $parentObj->save();
}
In my situation, I have two foreach loops. And each one contains approximate 50,000 ~ 70,000 records. $parent and $children are parameters passed to the method.
The raw data source both of $parent and $children are CSV files. And I'm using yield to transform them to be traversable with foreach.
There is no trouble with yield.
If you concern about the code: https://stackoverflow.com/a/37342184/2932590
I tried to unset both of $parentObj and $childrenObj at the end of first foreach, but unfortunately it's not working. I also tried to use the references &$parentData, but the result is same.
How could I make this work?
I was advised to use SPL Iterators in this case. Can anyone please explain me how it works?
 
     
     
     
     
    