提问者:小点点

php-内部foreach未重置


我已经对此进行了研究,但运气不好。

我最近访问了http://php.net/manual/en/control-structures.foreach.php并尝试在内部foreach中添加unset($var)reset($var),但两者都没有重置$var。

关于这个问题的最后一个问题是大约2年前,也没有帮助我。这里是链接PHP嵌套Foreach循环迭代和设置变量。

这是我的密码:

@foreach($employees as $employee)
    @foreach($Users as $user)
        @if($employee->id == $user->user_id)
            @break
        @else
            <option value="{{ $employee->id }}" branch="{{ $employee->branch }}" department="{{ $employee->department }}">{{ $employee->first_name }} {{ $employee->last_name }}</option>
            @break
        @endif
    @endforeach
@endforeach

我的预期结果是员工选项列表(可在代码的@else部分找到),而不包含现有用户(@if部分代码)。

我的代码只跳过第一个现有用户。我预计其中四个会被跳过。

顺便说一下,我用的是拉威尔。


共2个答案

匿名用户

将打破整个循环!相反,使用继续。以下是发生的事情。如果第一个员工匹配第一个用户,则使用down时,它将中断该循环,并且不会继续下4个员工!

如果您将使用继续,它将只跳过那些也是用户的员工(真正的部分)!替换打破继续和让我知道,如果它帮助!根据你的问题,这一定是它!

匿名用户

阅读代码时,您有一个员工集合/数组和一个用户集合/数组,并且您希望显示所有尚未成为用户的员工。第一步,我说得对吗?

如果是,我们假设$employees$users是集合。

$employees = Employee::get();
$users = User::get();

//Get all employees IDs
$ids = $users->pluck('id');

//Get all employees that are NOT users
$ghostEmployees = $employees->whereNotIn('user_id', $ids->all());

在您看来,您可以直接通过Ghostemployes循环

@foreach( $ghostEmployees as $employee ) 
    <option value="{{ $employee->id }}">
        {{ $employee->first_name }} {{ $employee->last_name }}
    </option>
@endforeach

提高效率

由于您只需要尚未成为用户的员工,因此可以直接从数据库中获取他们。

$ghostEmployees = Employee::whereNull('user_id')->get();

如果您仍然需要所有的员工用户在其他地方您的网页让他们分别

$employees = Employee::get():