【发布时间】:2020-06-12 18:38:29
【问题描述】:
我有一个充满关联数组的数组,如下所示:
$arr = [
['title' => 'My title', 'content' => 'lorem ...', comments: 'lorem ipsum'],
['title' => 'My title 2', 'content' => 'lorem ...'],
['title' => 'My title 3', 'content' => 'lorem ...'],
['title' => 'My title 4', 'content' => 'lorem ...', comments: 'lorem ipsum'],
];
如您所见,其中一些没有comments。
问题是,我有一个这样的 foreach 循环:
<?php foreach($arr as $key => $value){
extract($value);
?>
<div>
...etc
<?php if($comment): ?>
<span><?= $comment ?></span>
<?php endif; ?>
</div>
<?php } ?>
在第二次迭代中,变量$comments 现在保存数组中第一项的值,因为它没有在关联数组中找到属性并使用最后一个,从而破坏了if 语句.
有什么方法可以避免这种情况,而不必在原始数组中添加 comments: null 或其他内容?
【问题讨论】:
-
不使用提取。正确命名变量。您的 IDE 也会对此感到高兴。
-
if (isset($value['comment'])) { ... } -
在 PHP 中变量的作用域是函数,而不是迭代块。因此,当循环重复时,循环中设置的变量不会消失。
-
不要使用
extract()。你不需要它。永远。 -
@axiac 没有必要。
extract(),当 ̶c̶o̶r̶r̶e̶c̶t̶l̶y̶ 使用时,会很快导致无法维护的代码,因此,授予终身工作
标签: php