2010-12-02 22 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]); 
} 

Ce retourne un tableau comme ça:PHP: tableaux de fusion dans la boucle

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 
) 

Le problème est que, en retour de arr1 $ [0] et arr1 $ [1] sont hardcoded. Et si dans la boucle j'ai plus de 2 tableaux, disons 0,1,2,3 ans et ainsi de suite, ce code ne fonctionnera pas. Une idée? Peut-être que ma logique est compleatly mal ...

Répondre

4

Il n'y a pas besoin de créer des tableaux dans votre boucle - il suffit d'ajouter de nouvelles clés directement au premier réseau :

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

Ouais ... je suis tellement! # $$%. Peut-être que j'ai besoin d'aller dormir ... :-) .. En tout cas .. merci beaucoup! – Milen

1

je l'espère, je compris, ce que vous voulez dire ^^

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

Vous pourriez faire la fusion dans chaque itération:

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

qui a l'avantage vous pourriez éventuellement obtenir $temp_arr d'une fonction,

ou simplement ajouter tous les éléments à un tableau:

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

Merci beaucoup. Ça m'aide! – Milen

1

je ferais probablement quelque chose comme

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

hey bro j'ai le même problème mais qu'est ce que $ arr1? –

+0

ok, je l'ai eu. mais j'ai un tableau juste comme $ arr1 et je dois fusionner arry [0] à arry [1] comment faire cela? –

0

faire ce

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