public function getCheckoutForm(){ $arr = array( 'cmd' => '_cart', 'business' => 'some@mail', '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[] = array( 'item_number_'.$cpt.'' => $item['item_id'], 'item_name_'.$cpt.'' => $item['item_name'], 'quantity_'.$cpt.'' => $item['item_q'], 'amount_'.$cpt.'' => $item['item_price'] ); $cpt++; } return array_merge($arr,$arr1[0],$arr1[1]); }
Это возвращает массив следующим образом:
Array ( [cmd] => _cart [business] => some@mail [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 )
Проблема в том, что взамен $ arr1 [0] и $ arr1 [1] жестко закодированы. И если в цикле у меня есть более 2 массивов, скажем, 0,1,2,3 ан и так далее, этот код не будет работать. Есть идеи? Может быть, моя логика совершенно неверна …
Нет необходимости создавать массивы в вашем цикле – просто добавьте новые ключи непосредственно в первый массив:
public function getCheckoutForm(){ $arr = array( 'cmd' => '_cart', 'business' => 'some@mail', '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; }
Надеюсь, я понял, что вы имеете в виду ^^
foreach ($i = 0, $n = count($arr1); $i < $n; $i++) { $arr = array_merge($arr, $arr1[$i]); } return $arr;
Я бы, наверное, сделал что-то вроде
$count = count($arr1); for($i=0;$i<$count;$i++){ $arr = array_merge($arr,$arr1[$i]); } return $arr;
Вы можете выполнить слияние на каждой итерации:
foreach($this->items as $item){ $temp_arr = array( 'item_number_'.$cpt.'' => $item['item_id'], 'item_name_'.$cpt.'' => $item['item_name'], 'quantity_'.$cpt.'' => $item['item_q'], 'amount_'.$cpt.'' => $item['item_price'] ); $arr = array_merge($arr,$temp_arr) $cpt++; }
что имеет то преимущество, что вы можете получить $temp_arr
от функции,
или просто добавьте все элементы в один массив:
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++; }
сделай это
$count = count($data); $sum = 1; $arr = []; for($i=0;$i<$count;$i++){ $temp = $arr; if($i == $count - 1){ $sum = 0; } $arr = array_merge($temp,$data[$i + $sum]); } return $arr;