繁体   English   中英

针对 php 中的嵌套 foreach 循环数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM