Gau*_*pta 8 loops laravel laravel-5
Laravel foreach
和forelse
?之间的基本区别是什么?forelse
工作怎么样?
我知道foreach
复制你给定的数组并在其上工作,同时forelse
检查它是否存在并在其上循环(如果存在)但如果不是它使用你提供的其他条件.
Rob*_*ear 19
我相信你的问题的答案是,基本上,ForElse 是一个ForEach循环,但是对空输入有额外的处理.
从Blade模板上的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
Run Code Online (Sandbox Code Playgroud)
现在,如果我们将它与Laravel框架的源代码进行比较,以了解如何编译循环(所有Blades结构在网页上由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; ?>";
}
Run Code Online (Sandbox Code Playgroud)
本质上,ForElse循环具有内置代码和空输入的编译检查,在这种情况下,它可选地为空输入输出备用显示模板.
我想你可以在每种情况下使用ForEach循环,你可以使用ForElse循环,添加你包含和清空ForElse可能为你捕获的检查.
参考链接:
foreach
您所描述的循环遍历 an 中的每个元素,array
该foresee
循环本质上与您已经注意到的一个额外元素(语句)完全相同else
。当您有一个空的array
.
因此,循环遍历所有元素,例如渲染表格的一行,但在没有任何数据时放置空通知。
归档时间: |
|
查看次数: |
11740 次 |
最近记录: |