可能未声明父变量时,如何显示一列数据?
How to display a column of data when the parent variable might not be declared?
我正在我的 codeigniter 项目的视图层中生成一些动态内容。
<td class="<?php echo empty($log->category) ? "noactioncell" :''; ?> text-center align-middle">
<?php echo !empty($log->category) ? foreach($log->category as $c):echo $c->category_name."<br/>"; endforeach; : '';?></td>
问题是,我的三元表达式出现以下错误:
Parse error: syntax error, unexpected token "foreach"
当 $log->category
未声明时,如何显示由 <br/>
标记分隔的循环 category_name
数据而不产生此错误?
您发布的代码编码错误。正确且更具可读性的变体将是这样的:
<td class="<?php echo empty($log->category) ? "noactioncell" :''; ?> text-center align-middle">
<?php
if(!empty($log->category)){
foreach($log->category as $c){
echo $c->category_name."<br/>";
}
}
?>
</td>
这里有一个很好的解释:
The ternary operator takes 3 expressions in the form of (expr1) ? (expr2) : (expr3).
continue(或您的情况下的 foreach)是控制结构语句,而不是表达式。和
因此,它不能是三元运算符的操作数。事实上,none
PHP 的运算符接受控制结构作为操作数,就
我意识到。这同样适用于广泛的 C 系列的其他产品
语言也是如此。
为了可读性,最好使用 if
你的案例陈述。
作者:@Fabrício Matté How to use continue keyword in a ternary operator in php
您当然可以在一行代码中将您的柱状数据与 <br>
粘合在一起,但我不会使用三元表达式来做到这一点。
由于您的多维对象可能声明了 category
属性,因此您可以使用 empty()
作为第一个条件(三元表达式)。至于要作为<td>
的文本进行拼接的数据,可以使用null coalescing operator回退到数组。 array_column()
如果您要求未声明的列,则不会抱怨。使用这种技术组合可以防止在循环中生成不必要的尾随 </br>
。内爆平面阵列是这种情况下的 better/cleaner 方法(无论您喜欢哪种 syntax/style)。
代码:(Demo)
<td class="<?php echo empty($log->category) ? 'noactioncell ' : ''; ?>text-center align-middle">
<?php echo implode('<br/>', array_column($log->category ?? [], 'category_name')); ?>
</td>
当 category
有 3 个 category_name
属性时的输出:
<td class="text-center align-middle">
example1<br/>example2<br/>example3
</td>
未声明category
时的输出:
<td class="noactioncell text-center align-middle">
</td>
读起来太难?好吧,把它分散到多行。
<td class="<?php echo empty($log->category) ? 'noactioncell ' : ''; ?>text-center align-middle">
<?php echo implode(
'<br/>',
array_column(
$log->category ?? [],
'category_name'
)
); ?>
</td>
我正在我的 codeigniter 项目的视图层中生成一些动态内容。
<td class="<?php echo empty($log->category) ? "noactioncell" :''; ?> text-center align-middle">
<?php echo !empty($log->category) ? foreach($log->category as $c):echo $c->category_name."<br/>"; endforeach; : '';?></td>
问题是,我的三元表达式出现以下错误:
Parse error: syntax error, unexpected token "foreach"
当 $log->category
未声明时,如何显示由 <br/>
标记分隔的循环 category_name
数据而不产生此错误?
您发布的代码编码错误。正确且更具可读性的变体将是这样的:
<td class="<?php echo empty($log->category) ? "noactioncell" :''; ?> text-center align-middle">
<?php
if(!empty($log->category)){
foreach($log->category as $c){
echo $c->category_name."<br/>";
}
}
?>
</td>
这里有一个很好的解释:
The ternary operator takes 3 expressions in the form of (expr1) ? (expr2) : (expr3).
continue(或您的情况下的 foreach)是控制结构语句,而不是表达式。和 因此,它不能是三元运算符的操作数。事实上,none PHP 的运算符接受控制结构作为操作数,就 我意识到。这同样适用于广泛的 C 系列的其他产品 语言也是如此。
为了可读性,最好使用 if 你的案例陈述。
作者:@Fabrício Matté How to use continue keyword in a ternary operator in php
您当然可以在一行代码中将您的柱状数据与 <br>
粘合在一起,但我不会使用三元表达式来做到这一点。
由于您的多维对象可能声明了 category
属性,因此您可以使用 empty()
作为第一个条件(三元表达式)。至于要作为<td>
的文本进行拼接的数据,可以使用null coalescing operator回退到数组。 array_column()
如果您要求未声明的列,则不会抱怨。使用这种技术组合可以防止在循环中生成不必要的尾随 </br>
。内爆平面阵列是这种情况下的 better/cleaner 方法(无论您喜欢哪种 syntax/style)。
代码:(Demo)
<td class="<?php echo empty($log->category) ? 'noactioncell ' : ''; ?>text-center align-middle">
<?php echo implode('<br/>', array_column($log->category ?? [], 'category_name')); ?>
</td>
当 category
有 3 个 category_name
属性时的输出:
<td class="text-center align-middle">
example1<br/>example2<br/>example3
</td>
未声明category
时的输出:
<td class="noactioncell text-center align-middle">
</td>
读起来太难?好吧,把它分散到多行。
<td class="<?php echo empty($log->category) ? 'noactioncell ' : ''; ?>text-center align-middle">
<?php echo implode(
'<br/>',
array_column(
$log->category ?? [],
'category_name'
)
); ?>
</td>