微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 不读取刀片语法中的数组索引

如何解决Laravel 不读取刀片语法中的数组索引

我有一个多维数组,我将它传递给 laravel 中的一个视图。此数组用于使用刀片语法将数据输出到视图。但是当我尝试访问 @foreach 循环中的密钥时,我收到错误 Invalid argument supplied for foreach()
当我在 PHP 标记 @foreach () 循环之前的行中输出相同的数组索引时,没有错误。 有人可以告诉我为什么会发生这种情况吗?

数组 var_dumped : $item['all']

@PHP
    echo var_dump($item['all']);
    die();
@endPHP
array (size=1)
  0 => 
    array (size=22)
      'withdraw_prod' => int 0
      'class_id' => int 10
      'optional' => int 0
      'extra' => int 0
      'stage' => string 'NA' (length=2)
      'pest' => string 'NA' (length=2)
      'product' => string 'Monitering' (length=10)
      'description' => null
      'active' => null
      'class' => string 'Ander' (length=5)
      'rac_code' => null
      'htwoo' => string '0' (length=1)
      'prod_ha' => string '2.98' (length=4)
      'kgl_ha' => string '0.0000' (length=6)
      'hundred_met' => null
      'total' => string '0.0000' (length=6)
      'cost_kgl' => null
      'cost_total' => null
      'heading' => null
      'header' => int 0
      'hex' => null
      'is_na' => boolean true

代码下一行出现错误

@foreach ($item['all'] as $k => $spray)

一些日志输出

<?PHP $__currentLoopData = $item['all']; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $k => $spray): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>

Laravel 5.6.39

编辑: 我正在尝试将数据输出到从控制器生成 pdf 的视图:

$pdf = PDF::loadView('direct.tory.here.is.pdf',compact('program','taboo','colour','footnotes'))->setPaper('a4','landscape');

视图中的循环是:

@foreach ($program as $key => $item)
    @if(!in_array($key,$taboo))
         @PHP
             $cnt = 0;
             $extra_row = 0;
             //echo var_dump($item['all']);
         @endPHP
         @foreach ($item['all'] as $k => $spray)
              @PHP
                  // for in case array dimensions differ
                  $sprays = (array_key_exists(0,$spray)) ? $spray[0] : $spray;
                      if(!empty($sprays['description'])) {
                         $extra_row++;
                       }
                @endPHP
          @endforeach
    @endif
    @PHP
         $coL++;
    @endPHP
@endforeach

解决 这有点尴尬,但我创建了一个带有禁忌键的数组,它从我的主数组 $program 中过滤掉了非数组值。为了两个月前的测试,添加一个包含整数的额外虚拟键 => 值进行测试,但从未添加到禁忌列表中。这个虚拟整数值正在漏掉,导致 @foreach 循环无法迭代该数组索引不存在的 $item['all']。 感谢所有评论者的意见。

解决方法

我创建了一个带有禁忌键的数组,它从我的主数组 $program 中过滤掉了非数组值。为了两个月前的测试,添加了一个包含整数的额外虚拟 key => value 用于测试,但从未添加到禁忌列表中。这个虚拟整数值正在漏掉,导致 @foreach 循环无法迭代该数组索引不存在的 $item['all']

因此解决方案是在使用值之前进行疏忽而不是 type checking

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。