PHP如何获取嵌套foreach循环内的取值并在循环外正常调用使用
问题原因
问题核心是$secondCat的赋值逻辑错误:
- 内层
foreach遍历子分类时,只要当前子项不匹配$cat2,就会把$secondCat赋值为空字符串。遍历完所有子项后,只要最后一个子项不是匹配项,之前存的正确的$secondCat值就会被覆盖为空。 - 而
$firstCat能正常输出是因为代码存在笔误:不匹配的分支里赋值的是小写c的$firstcat,和大写C的$firstCat不是同一个变量,所以匹配时赋值的$firstCat不会被后续的循环覆盖。
解决方法
- 首先在循环外层提前初始化两个分类变量,避免PHP抛出未定义变量警告
- 调整赋值逻辑:仅当匹配到对应分类时才给变量赋值,不匹配时不要清空已有的正确值
调整后完整代码
// 提前初始化变量 $firstCat = ''; $secondCat = ''; $cat1 = (int)$_GET['CategoryFirst']; $cat2 = (int)$_GET['CategorySecond']; if(!empty($categories)){ echo "<div class='itemCategory'>"; $m = 0; foreach( $categories as $key => $val ){ $catMain = $val['id']; echo "<dl>"; echo "<dt>".$val['name']."</dt>"; $s = 0; $end = count($val['sub']); // 匹配一级分类时赋值 if($catMain == $cat1) { $firstCat = $val['name']; } foreach($val['sub'] as $subkey => $subval){ $on = ''; $last = ''; // 同时匹配一二类分类时赋值,不匹配时不清空已有的$secondCat if($catMain == $cat1 && $subkey == $cat2){ $on = 'on'; $secondCat = $subval; } if ($s == $end - 1) { $last = ' last'; } echo "<dd".$last." class='".$on.$last."'><a href='?CategoryFirst=".$catMain."&CategorySecond=".$subkey."&Sort=0&SearchString='>".$subval."</a></dd>"; $s++; } echo "</dl>"; $m++; } echo "</div>"; } // 现在可正常输出两个分类值 echo "<h3>".$firstCat.$secondCat."</h3>";
内容的提问来源于stack exchange,提问作者Amenadiel
相关产品推荐
相关产品推荐

