2011-06-16 51 views
0

在下面的第一个foreach语句中,$ widgets变量之前出现的&符号导致旧版本的PHP窒息。问题是如果没有&符号,这个函数就不能工作(我不记得为什么它需要,因为它是由另一个开发者开发的)。变量之前出现&符号时出现的PHP错误

我的问题是,为什么这会导致PHP 4.4出现错误,为什么它首先需要?

function exclude_widget_check($sidebars_widgets) 
{ 
    if(is_home()) 
    { 
     foreach ($sidebars_widgets as $sidebar_id => &$widgets) { 
      if ('my-widget' != $sidebar_id) { 
       continue; 
      } 
      foreach ($widgets as $idx => $widget_id) { 
       if (0 === strncmp($widget_id, 'my_slider', 6)) { 
        echo 'Unset widget'; 
        unset($widgets[$idx]); 
       } 
      } 
     } 
    } 
    return $sidebars_widgets; 
} 
+3

顺便说一句:你可以去除你可以直接访问'$ sidebars_widgets ['my-widget']'在外部的'foreach'和'if'中。 – Gumbo 2011-06-16 18:07:55

+0

Thanks Gumbo,你是否建议如果(is_home()){unset($ sidebars_widgets ['my-widget'];} – 2011-06-16 19:32:42

+0

我的意思是外层'foreach'只是迭代,直到关键是'my-widget' – Gumbo 2011-06-16 19:37:45

回答

0

它看起来像你遇到的问题与引用。您可能正在处理有关较旧实施的问题。

0

&符号是PHP中的“通过引用”运算符。 IE,这意味着当你编辑$ widgets时,你正在编辑$ sidebars_widgets数组中的实际元素,而不是它的副本。

如果它不与旧版本的PHP的工作,我只想通过索引来访问原始的元素,改变这样的:

unset($widgets[$idx]); 

这样:

unset($sidebar_widets[$sidebar_id][$idx]); 
+0

谢谢Craig。对我来说很有意义,但除非我已经完成了这个脚本,否则脚本不起作用。因此,在较早的PHP版本中,它永远不会发生unset语句。 – 2011-06-16 19:34:18