2017-04-08 66 views
0

我已經關於這方面的研究,但沒有運氣。php - 內部的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。

回答

0

break將打破整個循環!相反,使用continue。這是發生了什麼。如果第一位員工與第一位用戶匹配時使用break,那麼它將打破該循環,並且不會繼續爲下一位4名員工服務!

如果您將使用continue,它將僅跳過那些也是用戶的員工(真實部分)!用continue替換break,讓我知道它是否有幫助!根據你的問題,這一定是它!

+0

你能解釋正確,你想做什麼? –

+0

已經使用'繼續'先生,但它不是我想要做的。糾正我,如果我錯了,在我當前的代碼中,'break'語句將停止內部foreach並將外部foreach的指針移動到下一個項目。當我將第一個'break'改爲'continue'時,所有員工都被添加到'option'元素中。 – user6240129

+0

嘗試使用條件'$ employee-> id!= $ user-> user_id'並移除其他部分以及'break'。看看會發生什麼... –

0

讀取您的代碼,您擁有一組員工和一組用戶集合,並且想要顯示所有非用戶員工。第一步,我說得對嗎?

如果是,我們假設$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()); 

在您看來,您可以遍歷ghostEmployees直接

@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(): 
+0

感謝您直接在數據庫中獲得他們的洞察力。將在我的最後做到這一點。但是,爲什麼我現在的代碼不能正常工作?如果我錯了,請糾正我,他們看到一個「嵌套的foreach」,就是當內部的'foreach'滿足一定的條件並且回到父'foreach'時。其父'foreach'將移動它的當前指針並再次運行帶有參數重置的'child foreach'。 – user6240129