To use the array_merge
function in a for
/ foreach
/ while
loop, do the following:
$arraysToMerge = [ [1, 2], [2, 3], [5, 8] ]; $arraysMerged = []; foreach($arraysToMerge as $array) { $arraysMerged = array_merge($arraysMerged, $array); }
is a poor practice 😱 because it is a performance drain (especially on memory).
Since PHP 5.6, there is a new operator, the spread operator,
$arraysToMerge = [ [1, 2], [2, 3], [5,8] ]; $arraysMerged = array_merge([], ...$arraysToMerge); print_r($arraysMerged);
output
Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 3 [4] => 5 [5] => 8 )
which automatically expands the array without the need to loop through it.
- No more performance issues
- No
for
/foreach
/while
loops - Processed in a single line of code.
A more complex example can be represented by the following case:
- I have a list of students
- For each of them, I need to retrieve their used books
- I need to store them in a new array structure
It is possible to use the spread operator, but an intermediate process is required:
// student data model $students = [['id'=>1],['id'=>2],['id'=>3]]; // retrieve used books by student ID function searchUsedBooksByStudent($id) { $books = []; $books[1] = ['italian', 'history']; $books[2] = ['mathematics']; $books[3] = ['latin']; if (isset($books[$id])) { return $books[$id]; } return []; } $arrayUsedBooks = []; foreach ($students as $student) { $books = searchUsedBooksByStudent($student['id']); if ($books) { $arrayUsedBooks[] = $books; } } $arraysMerged = array_merge([], ...$arrayUsedBooks); print_r($arraysMerged);
output
Array ( [0] => italian [1] => history [2] => mathematics [3] => latin )
I hope these examples are helpful. Now, look at your code to see what you can improve!
Good work 👨💻
Top comments (0)