【问题标题】:Invalid argument supplied for foreach() in breadcrumbs function面包屑函数中为 foreach() 提供的参数无效
【发布时间】:2016-12-05 08:51:44
【问题描述】:

我在以下代码中为 foreach() 提供了一个无效参数,我不知道为什么..

function empuls_breadcrumb($breadcrumb) {
  if (!empty($breadcrumb))
      {
         foreach($breadcrumb as $k => $v) {
             foreach ($v as $key=>$value){
           $breadcrumb[$k][$key]='<span>'.$value.'</span>';
        }
        }
   return '<div class="breadcrumb">'. implode(' ', $breadcrumb['breadcrumb']) .'</div>';
  }
 }

这是用于 Drupal 主题的代码,面包屑显示没有问题,我当然希望警告能够得到解决。 感谢您查看它。

【问题讨论】:

    标签: drupal foreach invalid-argument


    【解决方案1】:

    我假设$breadcrumb 是不可迭代的。而不是 !empty 检查它是否是 is_array() (假设您期望一个数组而不是其他一些可迭代的 PHP 对象)

    您应该使用特定错误更新您的问题。如果$breadcrumb 数组不包含数组,则可能是内部for 导致问题,因为您没有在内部进行类型检查。

    如果您可以使用,我建议您尝试使用dpm($breadcrumb) 来查看此函数正在接收的变量的结构。

    【讨论】:

    • 如果我用 !is_array 更改 !empty 它会完全消失(错误和面包屑)。如果我将 !is_array 挂到 is_array 再次显示但带有警告消息(与上面提到的相同)。感谢您查看它。
    • 是的,我输入了一个错字——对不起!检查传入数组的数据的结构,它可能和你期望的不一样
    【解决方案2】:

    你必须在使用前测试变量:

    function empuls_breadcrumb($breadcrumb) {
      if (!empty($breadcrumb) && (is_array($breadcrumb) || is_object($breadcrumb))){
             foreach($breadcrumb as $k => $v) {
                 if(is_array($v) || is_object($v)){
                   foreach ($v as $key=>$value){
                        $breadcrumb[$k][$key]='<span>'.$value.'</span>';
                   }
                }
            }
       return '<div class="breadcrumb">'. implode(' ', $breadcrumb['breadcrumb']) .'</div>';
      }
     }
    

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 2011-02-07
      相关资源
      最近更新 更多