2017-04-08 6 views
0

私はすでにこれについて再開しましたが、運が悪いです。PHP - 内部foreachはリセットされません

最近私はhttp://php.net/manual/en/control-structures.foreach.phpを訪問し、unset($var)reset($var)を内側のforeachに追加しようとしましたが、両方とも$ 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一部):

は、ここに私のコードです。

私のコードは、最初の既存のユーザーだけをスキップします。私はそれらのうち4つがスキップされることを期待しています。

私はLaravelを途中で使用しています。

答えて

0

breakはループ全体を壊します!代わりに、continueを使用してください。ここで何が起こるかです。 breakを使用すると、最初の従業員が最初のユーザーと一致する場合、そのループが中断され、次の4人の従業員は続行されません。

continueを使用する場合は、ユーザーである従業員だけをスキップします(真のパート)! breakcontinueと交換してください。あなたの質問によると、これはそれでなければなりません!

+0

あなたがやりたいんものを適切に説明することができ、それらを別々に取得しますか? –

+0

すでに 'continue' sirですが、私がやりたいことではありません。もし私が間違っていれば私を修正してください。私の現在のコードでは、 'break'文は内部foreachを停止し、外側foreachのポインタを次の項目に移動します。最初の 'break'を' continue'に変更すると、従業員全員が 'option'要素に追加されています。 – user6240129

+0

'$ employee-> id!= $ user-> user_id'という条件を使い、else部分と' 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

関連する問題