si poteva evitare il foreach utilizzando le funzioni di array se tu fossi così inclinato.
La chiusura fornita a array_map
docs di seguito sottrarrà ogni valore $arr1
da ogni corrispondente $arr2
. Purtroppo array_map
non mantiene le chiavi quando si utilizza più di un array di input, così abbiamo usare array_combine
docs per unire i risultati sottratti di nuovo in un array con le chiavi originali:
$arr1 = array('a' => 1, 'b' => 3, 'c' => 10);
$arr2 = array('a' => 2, 'b' => 1, 'c' => 5);
$subtracted = array_map(function ($x, $y) { return $y-$x; } , $arr1, $arr2);
$result = array_combine(array_keys($arr1), $subtracted);
var_dump($result);
UPDATE
ero interessato a come l'array funziona in modo simile rispetto ad un foreach semplice, quindi ho messo a confronto entrambi usando Xdebug. Ecco il codice di prova:
$arr1 = array('a' => 1, 'b' => 3, 'c' => 10);
$arr2 = array('a' => 2, 'b' => 1, 'c' => 5);
function arrayFunc($arr1, $arr2) {
$subtracted = array_map(function ($x, $y) { return $y-$x; } , $arr1, $arr2);
$result = array_combine(array_keys($arr1), $subtracted);
}
function foreachFunc($arr1, $arr2) {
$ret = array();
foreach ($arr1 as $key => $value) {
$ret[$key] = $arr2[$key] - $arr1[$key];
}
}
for ($i=0;$i<10000;$i++) { arrayFunc($arr1, $arr2); }
for ($i=0;$i<10000;$i++) { foreachFunc($arr1, $arr2); }
Come si è visto, utilizzando il ciclo foreach
è un ordine di grandezza più veloce di compiere la stessa operazione utilizzando funzioni di matrice. Come potete vedere dall'immagine sottostante di KCachegrind, il metodo della funzione array richiedeva quasi l'80% del tempo di elaborazione nel codice sopra, mentre la funzione foreach richiedeva meno del 5%.
![enter image description here](https://i.stack.imgur.com/aXTWC.png)
La lezione qui: a volte le funzioni di matrice più semantiche (? Sorprendentemente) può essere inferiore prestazioni-saggio ad un buon circuito vecchio stile in PHP. Certo, dovresti sempre scegliere l'opzione più leggibile/semantica; micro-ottimizzazioni come questa non sono giustificate se rendono il codice più difficile da capire per sei mesi lungo la strada.
Sei sulla buona strada ... Penso che con un piccolo sforzo raggiungerai il tuo obiettivo. –