Laravelのforeach
とforelse
の基本的な違いは何ですか? forelse
はどのように機能しますか?Laravelのforeachとforelseの違い
foreach
私は、forelse
の中にある配列が存在するかどうかをチェックしていますが、それが存在すればループしていますが、それ以外の場合はelse条件を使用しています。
Laravelのforeach
とforelse
の基本的な違いは何ですか? forelse
はどのように機能しますか?Laravelのforeachとforelseの違い
foreach
私は、forelse
の中にある配列が存在するかどうかをチェックしていますが、それが存在すればループしていますが、それ以外の場合はelse条件を使用しています。
あなたの質問に対する答えは、本質的にForElse はです。ForEachループですが、空の入力を余分に処理します。ブレイドテンプレート、入力としてユーザーの同じリストで両方のループを示す一例でLaravel 5ドキュメントから
:
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
今、私たちはLaravelフレームワークのソースコードにこれを比較する場合ループがコンパイルされているかを確認する(Webページ上のPHPによってレンダリングされているときに、すべてのブレードの構築物をHTMLにコンパイルされている):
/**
* Compile the for-each statements into valid PHP.
*
* @param string $expression
* @return string
*/
protected function compileForeach($expression)
{
preg_match('/\(*(.*) +as *(.*)\)$/is', $expression, $matches);
$iteratee = trim($matches[1]);
$iteration = trim($matches[2]);
$initLoop = "\$__currentLoopData = {$iteratee}; \$__env->addLoop(\$__currentLoopData);";
$iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
return "<?php {$initLoop} foreach(\$__currentLoopData as {$iteration}): {$iterateLoop} ?>";
}
/**
* Compile the for-else statements into valid PHP.
*
* @param string $expression
* @return string
*/
protected function compileForelse($expression)
{
$empty = '$__empty_'.++$this->forElseCounter;
preg_match('/\(*(.*) +as *(.*)\)$/is', $expression, $matches);
$iteratee = trim($matches[1]);
$iteration = trim($matches[2]);
$initLoop = "\$__currentLoopData = {$iteratee}; \$__env->addLoop(\$__currentLoopData);";
$iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
return "<?php {$empty} = true; {$initLoop} foreach(\$__currentLoopData as {$iteration}): {$iterateLoop} {$empty} = false; ?>";
}
基本的に、ForElseループにはビルトインコードがあり、空の入力をコンパイルするかどうかのチェックが行われます。この場合、オプションで空の入力用に別の表示テンプレートが出力されます。
ForEachループを使用して、ForElseループを使用することができ、ForElseがあなたを捕まえる可能性がある空のチェックを含めることを追加することができます。参照用
リンク:
foreach
ループあなたはarray
の各要素をループを説明するように、あなたはすでに、else
文を気づいたように、本質的にforesee
ループは1つの余分な要素と全く同じです。 array
が空のときにこれを使用する主な用途。
したがって、すべての要素をループして、たとえばテーブルの行をレンダリングしますが、データがないときは空の通知を入れます。
返事を私は探しています何の説明のための –
感謝をforelseのthnxの機能についての詳細情報が必要 –