提问人:Syspect 提问时间:10/16/2013 最后编辑:Syspect 更新时间:10/17/2013 访问量:205
无法修改函数内的数组
cannot modify array inside a function
问:
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;
又不行了......
答:
1赞
Jelle Ferwerda
10/16/2013
#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);
2赞
Mark Baker
10/16/2013
#2
您需要在循环中设置$item“按引用”foreach
foreach($Products as &$item)
评论
foreach($Products as &$item)