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;
nope再次......
答案 0 :(得分:2)
您需要在foreach
循环
foreach($Products as &$item)
答案 1 :(得分: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
并在功能结束时返回$ products。
呼叫:
$ data = _changeArray($ data);