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-caseslog

関数を呼び出した後にProducts配列を出力していますが、変更されていません。参照渡しでうまくいくと思っていましたが、いや... 通常の方法で配列を渡し、関数から返すことも試みましたが、再び失敗しました。

私が間違っていること、または十分にしていないことは何ですか?

ああ、そうです、私もswitch-case次のようにしてみました:

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

いやまた…

4

2 に答える 2

2

foreachループで $item を「参照によって」設定する必要があります

foreach($Products as &$item)
于 2013-10-16T09:43:17.347 に答える
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

関数の最後で return $products を実行します。

電話:

$data = _changeArray($data);

于 2013-10-16T09:43:03.127 に答える