You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何获取嵌套foreach循环内的取值并在循环外正常调用使用

问题原因

问题核心是$secondCat的赋值逻辑错误:

  • 内层foreach遍历子分类时,只要当前子项不匹配$cat2,就会把$secondCat赋值为空字符串。遍历完所有子项后,只要最后一个子项不是匹配项,之前存的正确的$secondCat值就会被覆盖为空。
  • 而$firstCat能正常输出是因为代码存在笔误:不匹配的分支里赋值的是小写c的$firstcat,和大写C的$firstCat不是同一个变量,所以匹配时赋值的$firstCat不会被后续的循环覆盖。

解决方法

  1. 首先在循环外层提前初始化两个分类变量,避免PHP抛出未定义变量警告
  2. 调整赋值逻辑:仅当匹配到对应分类时才给变量赋值,不匹配时不要清空已有的正确值

调整后完整代码

// 提前初始化变量
$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:06:02