在PHP laravel中循环遍历JSON数组

时间:2016-08-13 08:56:46

标签: php json foreach laravel-5

控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class welcomeController extends Controller
{
    public function welcome() {
        $cards = json_decode('[{
            "id": 1,
            "name ": "a",
            "class": "class1"
        }, {
            "id": 2,
            "name ": "b",
            "class": "class2"
        }]');

        return view('welcome', compact('cards'));
    }
}

welcome.blade.php

@foreach($cards as $card)
    <p>{{ $card->name }} </p>
    <p>{{ $card->class }} </p>
@endforeach

浏览器上的错误消息 enter image description here

我是PHP laravel的新手。请帮我找到合适的解决方案。谢谢。

4 个答案:

答案 0 :(得分:1)

尝试

 return view('welcome')->with("cards",$cards);

答案 1 :(得分:1)

您好,代码中的一切正常问题出在json变量

$cards = json_decode('[{
    "id": 1,
    "name": "a",
    "class": "class1"
  }, {
    "id": 2,
    "name": "b",
    "class": "class2"
  }]
');

关键&#34;名称&#34;内部有一些空间,所以在你看来,你需要访问&#34; name&#34;这就是错误发生的原因

答案 2 :(得分:0)

从屏幕截图中,发送到模板的'cards'值是一个数组数组,而不是代码片段会产生的对象数组。

json_decode()的第二个参数是否转换为关联数组,默认为默认值。

答案 3 :(得分:0)

错误正在发生,因为你的json数组是多维的,而welcome.blade.php正在调用name和class的变量,这些变量在数组的那个级别不存在。

在welcome.blade.php中,改变你的foreach说:

@foreach($cards[0] as $card)
    <p>{{ $card->name }} </p>
    <p>{{ $card->class }} </p>
@endforeach

我相信这会让你回到正轨。希望有所帮助!