2013-10-16 45 views
0
protected function _changeArray(&$Products) 
    { 
     foreach($Products as $item) 
     { 
      Mage::log('Type: '.$item['attribute']); 

      switch($item['shipping_attribute']) 
      { 
       case '0': 
        $item['is_cargo'] = 'no'; 
        $item['is_bulky'] = 'no'; 
        $item['is_firework'] = 'no'; 
        Mage::log('assigned '.$item['attribute']); 
        break; 
       case '1': 
        $item['is_cargo'] = 'yes'; 
        $item['is_bulky'] = 'no'; 
        $item['is_firework'] = 'no'; 
        Mage::log('assigned '.$item['attribute']); 
        break; 
       case '2': 
        $item['is_cargo'] = 'no'; 
        $item['is_bulky'] = 'yes'; 
        $item['is_firework'] = 'no'; 
        Mage::log('assigned '.$item['attribute']); 
        break; 
       case '3': 
        $item['is_cargo'] = 'no'; 
        $item['is_bulky'] = 'no'; 
        $item['is_firework'] = 'yes'; 
        Mage::log('assigned '.$item['attribute']); 
        break; 
      } 
      Mage::log('"switch" finished!'); 
     } 
    } 

我想改變這些Products數組的元素,這取決於數組中另一個元素的值。似乎沒有發生的事情是他們不會改變......一切都始終保持在'no'的價值。我知道'attribute'值的正確方式不同,並且該函數正確地通過了switch-cases,因爲我正在編寫log中的測試。不能修改函數內的數組

我在調用我的函數後打印Products數組,並且沒有更改。我認爲它可以通過引用來傳遞,但是不會......我也嘗試以正常的方式傳遞數組並將其從函數返回 - 再次失敗。

我做錯了什麼或者做得不夠?

哦,是的,我也試過具有switch-case以下列方式:再次

case '...': 
    $Products['is_cargo'] = 'yes'; 
    $Products['is_bulky'] = 'no'; 
    $Products['is_firework'] = 'no'; 
    Mage::log('assigned '.$Products['attribute']); 
    break; 

都能跟得上......

+0

'的foreach($產品爲&$項目)' –

回答

1

你實際上並不做任何輸入數組,除了閱讀它們..

您需要更改輸入數組,而不是$ item數組,$ item只是一個提取的項目。

所以基本上:

使用:

foreach($Products as $key => $item) 

,並更改爲:

$Products[$key]['is_cargo'] = 'no'; 

理想情況下,你不要參考使用功能,而是從函數返回的輸出數組劇本

加了:

我想這樣運行它:

protected function _changeArray($Products) 
{ 
    foreach($Products as $key => $product) 
    { 
     Mage::log('Type: '.$Products[$key]['attribute']); 

     switch($Products[$key]['shipping_attribute']) 
     { 

      case '0': 
       $Products[$key]['is_cargo'] = 'no'; 
       $Products[$key]['is_bulky'] = 'no'; 
       $Products[$key]['is_firework'] = 'no'; 
       break; 
//etc 

,並在函數結束做一回$產品。

呼叫:

$數據= _changeArray($數據);

2

您需要設置 「引用」 $項目在foreach循環

foreach($Products as &$item)