问题是实际定义的,其值为(即空),因此这意味着该语句的计算结果为 。同样的事情也适用于集合。如果集合为空(即没有元素但已定义)仍将计算为,但访问将导致错误。$blogs
[]
array
isset($blogs)
true
isset($blogs)
true
$blogs[0]
Undefined offset: 0
您可以尝试以下解决方案:
使用计数
if(count($blogs)) { /* do something */ }
if 或 函数将返回零,这意味着该值为空。$blogs = []
$blogs = null
count
$blogs
使用空
if(!empty($blogs)) { /* do something */ }
这相当于 PHP 手册中描述的编写 - 空:!isset($var) || $var == false
如果 var 存在并且具有非空的非零值,则返回 FALSE。否则返回 TRUE。
以下内容被视为空:
""
(空字符串)
0
(0 为整数)
0.0
(0 作为浮点数)
"0"
(0 作为字符串) NULL
FALSE
array()
(一个空数组)
$var;
(已声明但未带值的变量)
检查集合是否为空
if 是 足以使用 'isNotEmpty() 方法检查它是否不为空:$blogs
Collection
@if($blogs->isNotEmpty()) <!-- Do your stuff --> @endif
编辑
我忘了添加刀片语法:
@if(count($blogs)) <!-- Do whatever you like --> @endif
或
@if(!empty($blogs)) <!-- Do whatever you like --> @endif
编辑 2
我正在为这个答案添加更多内容,以解决评论中提出的一些问题。我认为您的问题如下:
$blogs
是一个空集合,因此已定义但它没有元素。因此,该语句将计算为传递第一个条件。在边栏选项卡模板中,所做的检查绝对不等于注释中指出的,但它是一个将返回 or 的表达式,因此即使存在,它也永远不会打印出参数。这里的问题是,在检查条件时,您实际上是在访问将触发异常的集合元素,因为该集合实际上是空的。我说的是,除了if(isset($blogs))
true
if
{{ $blogs[0]->title or '' }}
<?php isset($blogs[0]->title) ? $blogs[0]->title : '' ?>
true
false
title
$blogs[0]
$blogs[0]->title
0
$blogs
Undefined offset: 0
if(count($blogs)) { /* do something */ }
(检查已设置的并且其长度大于 ),您应该在模板中执行$blogs
0
{{ isset($blogs[0]->title) ? $blogs[0]->title : '' }}
或更简洁
{{ $blogs[0]->title ?: '' }}
假设控制流只有在通过第一个 .如果问题仍然存在,则问题在代码中的其他位置恕我直言。$blogs
if