即使我已经在控制器中解码了数组,字符串偏移也是非法的?
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
是缺席者,$data
是Maxim 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插件获取数组时出现“非法字符串偏移”错误