- Pubblicato il
array_merge di PHP utilizzato in un ciclo è una pessima pratica
- Autori
- Name
- Maico Orazio
- @mainick
Utilizzare la funzione array_merge
in un ciclo for / foreach / while
come in questo modo:
$arraysToMerge = [ [1, 2], [2, 3], [5, 8] ];
$arraysMerged = [];
foreach($arraysToMerge as $array) {
$arraysMerged = array_merge($arraysMerged, $array);
}
è una pessima pratica 😱 perché è un killer di prestazioni (soprattutto di memoria).
Da PHP 5.6, c'è un nuovo operatore, l'operatore spread
$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
)
che espande in automatico l'array senza la necessità di ciclarlo.
- niente più problemi di prestazioni
- nessun ciclo
for / foreach / while
- processato in una singola riga di codice
Un esempio più complesso può essere rappresentato dal seguente caso:
- ho un elenco di studenti
- per ognuno di essi devo recuperare i libri usati
- devo memorizzarli in una nuova struttura array
E' possibile utilizzare l'operatore spread, ma è necessario un processo intermedio:
// struttura dati studenti
$students = [['id'=>1],['id'=>2],['id'=>3]];
// recupera i libri usati per ID studente
function searchUsedBooksByStudent($id) {
$books = [];
$books[1] = ['italiano', 'storia'];
$books[2] = ['matematica'];
$books[3] = ['latino'];
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] => italiano
[1] => storia
[2] => matematica
[3] => latino
)
Spero ti siano utili questi esempi, guarda ora il tuo codice per capire cosa puoi migliorare!!!
Buon lavoro 👨💻