PHP使用foreach遍历多数组结合if条件处理长度不匹配数组的输出问题
PHP多数组遍历匹配输出修正方案
问题根源
原有代码直接使用$contents数组的索引作为$links数组的取值下标,但$types数组中存在不需要输出链接的txt类型内容,占用了索引位置,导致第四个pdf类型内容匹配到了$links数组不存在的下标,无法输出对应链接。
修正后代码
$contents = array('content1', 'content2', 'content3', 'content4'); $types = array('pdf', 'pdf', 'txt', 'pdf'); $links = array('link1', 'link2', 'link3'); // 定义pdf链接专用索引计数器 $pdfLinkIdx = 0; foreach ($contents as $key => $value) { echo "$value<br>"; if ($types[$key] == 'pdf') { echo $links[$pdfLinkIdx] . '<br>'; $pdfLinkIdx++; } }
如果要兼容后续链接数量不足的场景,可以加一层判断避免报错:
$contents = array('content1', 'content2', 'content3', 'content4'); $types = array('pdf', 'pdf', 'txt', 'pdf'); $links = array('link1', 'link2', 'link3'); $pdfLinkIdx = 0; foreach ($contents as $key => $value) { echo "$value<br>"; if ($types[$key] == 'pdf' && isset($links[$pdfLinkIdx])) { echo $links[$pdfLinkIdx] . '<br>'; $pdfLinkIdx++; } }
实现逻辑
- 新增的
$pdfLinkIdx计数器仅在匹配到pdf类型内容时才自增,不会被非pdf内容的索引干扰,保证了链接数组的元素按顺序分配给所有需要输出链接的pdf内容 - 可选的
isset判断可以避免链接数组元素不足时抛出PHP Notice错误,适配数组长度后续调整的场景
内容的提问来源于stack exchange,提问作者user2983865
相关产品推荐
相关产品推荐

