I saw two pull requests today that both did something like this:
$result=[];
foreach($array as $item) {
$result += $this->someMethodThatReturnsArray();
}
This will not give the expected results, see for yourself: https://3v4l.org/66S6m
There are several solutions for this:
- Use array_merge:
$result = array_merge($result, $this->someMethodThatReturnsArray());
- Use the array-spread operator:
$result = [...$result, ...$this->someMethodThatReturnsArray()]
(as of PHP 7.4. We are all using this, right? 7.3 is end of line, just mentioning)
Caveat: All this will create a lot of copies of the array, and there are ways to avoid most of them. But all the ways I can think on top of my head have costs in terms of readability. So, if you think you have an issue with performance, then first measure, then profile, and then – if you see that this is the actual source of your performance loss – only then optimize this.