PHP: Unisci arrays in loop

public function getCheckoutForm(){ $arr = arrays( 'cmd' => '_cart', 'business' => '[email protected]', 'no_shipping' => '1', 'upload' => '1', 'return' => 'url', 'cancel_return' => 'url1', 'no_note' => '1', 'currency_code' => 'url2', 'bn' => 'PP-BuyNowBF'); $cpt=1; foreach($this->items as $item){ $arr1[] = arrays( 'item_number_'.$cpt.'' => $item['item_id'], 'item_name_'.$cpt.'' => $item['item_name'], 'quantity_'.$cpt.'' => $item['item_q'], 'amount_'.$cpt.'' => $item['item_price'] ); $cpt++; } return arrays_merge($arr,$arr1[0],$arr1[1]); } 

Questo restituisce una matrix come quella:

  Array ( [cmd] => _cart [business] => [email protected] [no_shipping] => 1 [upload] => 1 [return] => url1 [cancel_return] =>url2 [no_note] => 1 [currency_code] => EUR [bn] => PP-BuyNowBF [item_number_1] => 28 [item_name_1] => item_name_1 [quantity_1] => 1 [amount_1] => 5 [item_number_2] => 27 [item_name_2] => item_name_2 [quantity_2] => 1 [amount_2] => 30 ) 

Il problema è che in compenso $ arr1 [0] e $ arr1 [1] sono hardcoded. E se in loop ho più di 2 matrici, diciamo 0,1,2,3 ans così via, questo codice non functionrà. Qualche idea? Forse la mia logica è completamente sbagliata …

Non è necessario creare arrays nel loop, basta aggiungere nuove chiavi direttamente al primo arrays:

 public function getCheckoutForm(){ $arr = arrays( 'cmd' => '_cart', 'business' => '[email protected]', 'no_shipping' => '1', 'upload' => '1', 'return' => 'url', 'cancel_return' => 'url1', 'no_note' => '1', 'currency_code' => 'url2', 'bn' => 'PP-BuyNowBF' ); $cpt=1; foreach($this->items as $item){ $arr['item_number_'.$cpt] = $item['item_id']; $arr['item_name_'.$cpt] = $item['item_name']; $arr['quantity_'.$cpt] = $item['item_q']; $arr['amount_'.$cpt] = $item['item_price']; $cpt++; } return $arr; } 

Spero, ho capito, cosa intendi ^^

 foreach ($i = 0, $n = count($arr1); $i < $n; $i++) { $arr = arrays_merge($arr, $arr1[$i]); } return $arr; 

Probabilmente farei qualcosa di simile

 $count = count($arr1); for($i=0;$i<$count;$i++){ $arr = arrays_merge($arr,$arr1[$i]); } return $arr; 

Potresti fare l'unione in each iterazione:

 foreach($this->items as $item){ $temp_arr = arrays( 'item_number_'.$cpt.'' => $item['item_id'], 'item_name_'.$cpt.'' => $item['item_name'], 'quantity_'.$cpt.'' => $item['item_q'], 'amount_'.$cpt.'' => $item['item_price'] ); $arr = arrays_merge($arr,$temp_arr) $cpt++; } 

che ha il vantaggio che potresti get $temp_arr da una function,

o semplicemente aggiungi tutti gli elementi a un arrays:

 foreach($this->items as $item){ $arr['item_number_'.$cpt.''] => $item['item_id']; $arr['item_name_'.$cpt.''] => $item['item_name']; $arr['quantity_'.$cpt.''] => $item['item_q']; $arr['amount_'.$cpt.''] => $item['item_price']; $cpt++; } 

Fai questo

 $count = count($data); $sum = 1; $arr = []; for($i=0;$i<$count;$i++){ $temp = $arr; if($i == $count - 1){ $sum = 0; } $arr = arrays_merge($temp,$data[$i + $sum]); } return $arr;