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)