DEV Community

Cover image for Using array_merge in a PHP loop is considered bad practice
Maico Orazio
Maico Orazio

Posted on

2

Using array_merge in a PHP loop is considered bad practice

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);
}
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

output

Array
(
    [0] => 1
    [1] => 2
    [2] => 2
    [3] => 3
    [4] => 5
    [5] => 8
)
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

output

 Array
(
    [0] => italian
    [1] => history
    [2] => mathematics
    [3] => latin
)
Enter fullscreen mode Exit fullscreen mode

I hope these examples are helpful. Now, look at your code to see what you can improve!

Good work πŸ‘¨β€πŸ’»

Top comments (0)

πŸ‘‹ Kindness is contagious

Engage with a wealth of insights in this thoughtful article, valued within the supportive DEV Community. Coders of every background are welcome to join in and add to our collective wisdom.

A sincere "thank you" often brightens someone’s day. Share your gratitude in the comments below!

On DEV, the act of sharing knowledge eases our journey and fortifies our community ties. Found value in this? A quick thank you to the author can make a significant impact.

Okay