php - 内部foreach未重置

时间:2017-04-08 02:09:47

标签: php laravel foreach

我已经对此进行了研究,但没有运气。

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

关于这个的最后一个问题是大约2年前,也没有帮助我。这是链接PHP nested foreach loop iterate and set variable

这是我的代码:

@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部分代码)。

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

顺便说一下,我正在使用Laravel。

2 个答案:

答案 0 :(得分:0)

break将打破整个循环!相反,请使用continue。这是发生了什么。当您使用break时,如果第一个员工与第一个用户匹配,那么它将打破该循环并且不会继续接下来的4个员工!

如果您将使用{{1} ,它将只跳过那些用户的员工(真正的部分)!将continue替换为break并告诉我它是否有帮助!根据你的问题,这一定是它!

答案 1 :(得分:0)

阅读代码,您拥有一组员工和一组用户,并且您希望显示所有非用户的员工。第一步,我是对的吗?

如果是,请假设(-?[0-9]{1,5})\(\$(s[0-7]|t[0-9])\)$employees是集合。

$users

在您看来,您可以直接遍历ghostEmployees

$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());

提高效率

由于您只需要非用户的员工,您可以直接从数据库中获取这些员工。

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

如果您仍然需要所有员工在页面中的其他位置使用,请单独购买

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