2010-12-02 64 views
2
public function getCheckoutForm(){ 
    $arr = array(
     '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[] = 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]); 
} 

這將返回陣列那樣:PHP:合併數組中循環

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 
) 

的問題是,在回$ ARR1 [0]和$ ARR1 [1]是硬編碼的。如果在循環中我有兩個以上的數組,讓我們說0,1,2,3等等,這段代碼將不起作用。任何想法?也許我的邏輯是錯誤的compleatly ...

回答

4

沒有必要在你的循環創建數組 - 只需直接添加新鍵的第一陣列:

public function getCheckoutForm(){ 
    $arr = array(
     '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; 
} 
+0

是的......我是這樣!#$$%。也許我需要去睡覺...... :-) ..無論如何..非常感謝! – Milen 2010-12-02 00:43:48

1

我希望,我明白了,你的意思^^

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

你可以做合併在每次迭代:

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++; 
} 
+0

非常感謝。它幫助到我! – Milen 2010-12-02 00:42:53

1

我可能會做一些像

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

嘿兄弟我有同樣的問題,但什麼是$ arr1? – 2016-03-22 08:05:41

0

做到這一點

$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;