[英]targeting nested foreach loop array in php
我想通过父 foreach $content['tabs'] 循环中的 $tabs['downloads'] 子数组元素(参见以下片段的底部)进行 foreach 循环。 我的尝试不起作用。 我得到一个无效的论点。 建议表示赞赏。
$content 数组示例:
$content=
[tabs' => [
0 => [
'label' => 'Afoxé',
'downloads' => [
0 => 'afoxe2.mscz',
1 => 'afoxe2.pdf'],
'content' => "blah blah",
],
]
嵌套的 foreach 循环:
<? $i = 1; foreach($content['tabs'] as $key => $tab):
$tabid=$tab['label'] . "-" . $tabsuffix; ?>
<div class="tab-pane fade <?= ($i == 1 ? "show active" : "")?>" id="pills-<?=$tabid?>" role="tabpanel"
aria-labelledby="pills-<?=$tabid?>-tab" tabindex="0">
<?= $Parsedown->text($tab["content"]) ?>
<? foreach($tab['downloads'] as $download): ?>
<a class="btn btn-orange blob text-white" role="button" href="../public/<?= $download ?>"
download="<?= $download ?>"><?= $download ?></a>
<? endforeach; ?>
</div>
<? $i++; endforeach; ?>
我在您的代码中看到的唯一未定义索引是video
字段。
使用Null Coalescing Operator可以轻松解决此问题。 这仅适用于 PHP 7+它的作用是返回其第一个操作数(如果存在且不是 null); 否则返回第二个操作数。
作为替代方案,您始终可以使用if(isset($tab['video']))
在其他任何地方使用测试密钥之前。
还有$tabsuffix
但我假设它是在 foreach 之前定义的。
但是,例如,如果不是所有条目都有downloads
密钥,您还应该处理:
<? $i = 1;
foreach($content['tabs'] as $key => $tab):
$tabid=$tab['label'] . "-" . $tabsuffix; ?>
<div class="tab-pane fade <?= ($i == 1 ? "show active" : "")?>" id="pills-<?=$tabid?>" role="tabpanel"
aria-labelledby="pills-<?=$tabid?>-tab" tabindex="0">
<? if( stripos(str_replace(' ', '', $tab['video'] ?? ''), '</iframe>' ) !== false ) : // <--- check this line ?>
<div class="ratio ratio-16x9">
<?= $tab["video"] ?>
</div>
<? endif; ?>
<?= $Parsedown->text($tab["content"]) ?>
<? foreach($tab['downloads'] ?? [] as $download): // <--- and this line ?>
<a class="btn btn-orange blob text-white" role="button" href="../public/<?= $download ?>"
download="<?= $download ?>"><?= $download ?></a>
<? endforeach; ?>
</div>
<? $i++; endforeach; ?>
您可以在此处查看此代码。 我还添加了带有video
的数据和一个没有downloads
密钥的数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.