即使我已经在控制器中解码了数组,字符串偏移也是非法的?

Posted

技术标签:

【中文标题】即使我已经在控制器中解码了数组,字符串偏移也是非法的?【英文标题】:Illegal string offset even though I already decoded array in controller? 【发布时间】:2019-05-23 09:26:57 【问题描述】:

我从一个看起来像这个例子的表单中得到一个数组:

array [
  "absender" => "Maxim Ivan",
  "email" => "maximivan@example.com",
  "telefon" => "1234567890",
  "fax" => null,
  "grund" => "Gehaltserhöhung",
  "termin" => [
      0 => [
        "person" => "Some Name",
        "meeting" => "10.05"  
      ],
      1 => [
        "person" => "Another Name",
        "meeting" => "18.05"  
      ],
      2 => [
        "person" => "Again another name",
        "meeting" => null,
        "next-possible-meeting" => "1"  
      ],
      3 => [
        "person" => "And again",
        "meeting" => null,
        "next-possible-meeting" => "1"  
      ],
      4 => [
        "meeting" => null,
  ],
  "bemerkung" => "some notes by Maxim"
]

我对数组进行了编码,使其可以在upload-方法中访问,如下所示:

<input type="hidden" value=" json_encode($arrayData) " name="array" />

upload-method 中,我有一个验证(http 请求)类作为 $request 参数,所以我得到数组并直接解码它,如下所示:

$array = json_decode($_POST['array']);

我将$array 提供给刀片视图,但是当我尝试访问它以显示如下值时:

// controller
return view('view', compact('array));

// blade view
@if (isset($array) && !empty($array))
   @foreach ($array as $key => $data)
      <tr>
         @if (!empty($data) && !is_numeric($key))
           <td> $key :</td>
           <td> $data[$key] </td>
         @else
           <td> $key :</td>
           <td>keine Angabe.</td>
         @endif
      </tr>
   @endforeach
@endif

我收到错误Illegal string offset 'absender',但我真的不明白为什么,我已经在控制器中对其进行了解码。还是我必须在视图中再次对其进行解码?

我很困惑。

【问题讨论】:

因为absender$key 是缺席者,$dataMaxim Ivan,并且在字符串Maxim Ivan 上调用$data['absender'] 是没有意义的。 @Jonnix 那么我需要另一个 foreach 吗? $data[$key] 替换为$data,但如果您打算处理termin 数组,则需要执行另一个循环。 【参考方案1】:

$data[$key] 是个问题..

当你遍历你的循环时,

$key = "缺席者",

$data = "马克西姆·伊万"

在你的刀片中,你正在编写代码为 $data[$key],它试图找出“Maxim Ivan”作为一个数组,它的键为“absender”。

你的情况不是这样!

您可以在该行之前检查数据是否为数组:

is_array($data);

如果返回true,则通过再次循环处理数组大小写以获取所需的值,如果返回false,则直接打印$data。

希望它能解决您的问题!

【讨论】:

这帮助我找到了正确的解决方案,我现在可以使用了,谢谢 :)

以上是关于即使我已经在控制器中解码了数组,字符串偏移也是非法的?的主要内容,如果未能解决你的问题,请参考以下文章

为dataTable jquery插件获取数组时出现“非法字符串偏移”错误

如何在 Codeigniter 中的数据库中插入数组?

使用 PHP 数组输出 MySQL 查询 - foreach 循环错误“非法偏移”和“无效参数”

如何在 PHP 中修复警告非法字符串偏移

从api流明获取数据时出现错误的非法字符串偏移[重复]

如何修复php非法偏移错误[重复]