Laravel-foreach局部变量正在覆盖全局变量 - php

今天,我面临一个非常奇怪的问题。
我有一个控制器,将从该控制器向视图sections threadthreads发送三个变量。
在我看来,我正在使用foreach循环遍历所有部分,如下所示:

@foreach($sections as $i => $section)

对于每个部分,我都将创建一个div并给出如下的ID:

id="{{ $thread->slug }}-{{ $section->slug }}

现在在这个div中,我正在遍历所有这样的线程:

@foreach($threads as $thread)

并为每个线程创建div。
现在的问题是,当线程循环完成存储在局部变量线程中的线程中的最后一项时,将覆盖从视图发送的线程变量。
现在,我知道要解决此问题,我可以将foreach循环中的局部变量重命名为其他变量,但是我的问题是为什么会这样?为什么这个局部变量会覆盖我的全局变量?

这是我的控制器:

    public function show($slug)
    {
        return view('thread.show')
            ->with('sections', Section::all())
            ->with('threads', Thread::all())
            ->with('thread', Thread::where('slug', $slug)->first());
    }

视图:

@foreach($sections as $i => $section)
 <div class="tab-pane fade" id="{{ $thread->slug }}-{{ $section->slug }}">
  @foreach($threads as $thread)
   <div class="card mb-3">
    {{--/// Some Html--}}
   </div
  @endforeach
 </div>
@endforeach

现在,这里是呈现的html的屏幕截图:

Laravel-foreach局部变量正在覆盖全局变量 - php

线程名称是page-172
第一个div的id呈现良好,但请看一下其他两个div的id
section-341threads中的最后一项

参考方案

但是我的问题是为什么会这样?为什么这个局部变量会覆盖我的全局变量

因为php无法区分$thread$thread

尽管您可以期望变量$threadforeach($threads as $thread)上下文中仅存在于foreach主体中,但在php中并非如此。

局部变量$thread存在于视图范围内,而不是循环体中。
由于php不能区分,因此原始文件将被覆盖。

检查对象是否已在集合中-Laravel - php

当我循环一系列不同的结果时,我希望将对象添加到新集合中。查询:$osRed = Item::where('category', 'Hardware') ->where(function ($query) { $query->where('operating_system', '…

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…

Laravel 5错误报告抑制 - php

在Laravel 4中,抑制E_NOTICE消息很容易;我似乎无法做到这一点,因为如果我添加error_reporting(E_ALL ^ E_NOTICE) 它只是被覆盖的任何地方。这似乎发生在这里:(index.php)$response = $kernel->handle( $request = Illuminate\Http\Request::…

Laravel迁移外键 - php

我正在尝试在Laravel中建立一些关系,我对关系和迁移有些困惑。这是我正在做的一个简单示例:Users -> has_many -> Cats 因此,我的用户迁移文件与Cats的关系如下:$table->foreign('cats_id')->references('id')->on(&…

laravel Hash::make继续给出不同的结果 - php

我想在laravel 4中使用身份验证我改了桌子和莫贝尔的名字当用户注册时,我拥有密码并将其保存,哈希为:$password = Hash::make(Input::get('password')); 然后当用户登录时,我想先对他/她进行身份验证。我这样做是这样的:if (Auth::attempt(array('usernam…