【问题标题】:How to use value generated from nested foreach loop, outside the loop?如何在循环外使用从嵌套 foreach 循环生成的值?
【发布时间】:2021-10-21 08:55:33
【问题描述】:

这是我的数组

$categories = array(
    "0" => array( 
        "name" => "All",
        "id" => "100",
        "sub" => array(
                   "0" => "All",
                 "100" => "Limited Sales",
                ),
     ),
    "1" => array( 
        "name" => "Costumes",
        "id" => "200",
        "sub" => array(
                   "0" => "All",
                 "100" => "Male",
                 "200" => "Female",
                 "300" => "Etc",
                ),
     ),
    "2" => array( 
        "name" => "Accessory",
        "id" => "300",
        "sub" => array(
                   "0" => "All",
                 "100" => "Bracelets",
                 "200" => "Rings",
                 "300" => "Necklaces",
                 "400" => "Etc",
                ),
     ),
    "3" => array( 
        "name" => "Convenience",
        "id" => "400",
        "sub" => array(
                   "0" => "All",
                 "100" => "Cards",
                 "200" => "Potions",
                 "300" => "Buffs",
                 "400" => "Etc",
                ),
     ),
);

这是我当前的循环代码:

    $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']; 
                } else { 
                    $firstcat = '';
                }   
                foreach($val['sub'] as $subkey => $subval){
                    if($catMain == $cat1 && $subkey == $cat2){ 
                        $on = 'on';
                    } else { 
                        $on = ''; 
                    }
                    if($catMain == $cat1 && $subkey == $cat2) {
                        $secondCat = $subval; 
                    } else {
                        $secondCat = ''; 
                    }
                    if ($s == $end - 1) {
                        $last = ' last'; 
                    }else{ 
                        $last = ''; 
                    }

                   // If i echo $secondCat here it returns the correct data of $subval

                    echo "<dd".$last." class='".$on.$last."'><a href='?CategoryFirst=".$catMain."&CategorySecond=".$subkey."&Sort=0&SearchString='>".$subval."</a></dd>";
                     $s++;               
                     
                }           
                echo "</dl>";
                $m++;
        }   
        echo "</div>";  
    
    } 

//NEED HELP HERE - $secondCat returns nothing
    echo "<h3>".$firstCat.$secondCat."</h3>";

正如您在代码中看到的,我使用了 $catmain$subkey$_GET['CategoryFirst']、$_GET['CategorySecond'] 用于比较,因此如果用户当前页面具有这四个匹配值,则链接突出显示

我能够做到这一点,但这次我需要更多的东西。我需要能够从第二个 foreach 打印 $subval 并在循环之外使用它来将其放入

标签。

我在 $firstCat 上成功地做到了,但 $secondCat 返回 nothing

但如果尝试在嵌套的 foreach 循环中回显 $secondCat,它会返回正确的 $subval 数据。

我应该怎么做才能使 $secondCat 在 H3 标签(外部循环)上打印类似于 $firstCat 的正确数据?

【问题讨论】:

  • 删除else {$secondCat = ''; } 语句怎么样?想象一下,您的数据位于数组(中间)之间的某个位置,一旦到达下一行,它将设置为$secondCat = ""
  • @NcXNaV 圣牛!!解决了它:D非常感谢!

标签: php arrays loops foreach


【解决方案1】:

在你的内部 foreach 中使用此代码:

                foreach($val['sub'] as $subkey => $subval){
                    if($catMain == $cat1 && $subkey == $cat2){ 
                        $on = 'on';
                    } else { 
                        $on = ''; 
                    }
                    if($catMain == $cat1 && $subkey == $cat2) {
                        $secondCat = $subval; 
                    }
                    if ($s == $end - 1) {
                        $last = ' last'; 
                    }else{ 
                        $last = ''; 
                    }

                   // If i echo $secondCat here it returns the correct data of $subval

                    echo "<dd".$last." class='".$on.$last."'><a href='?CategoryFirst=".$catMain."&CategorySecond=".$subkey."&Sort=0&SearchString='>".$subval."</a></dd>";
                     $s++;               
                     
                }  

这应该可行,因为该变量不会被空字符串覆盖,并且将保留在循环之外。

【讨论】:

  • @Amenadiel 如果此答案有效,您能否为未来的访客接受/投票?
  • 完成! :D 对不起,我忘了。
猜你喜欢
  • 2015-07-15
  • 2012-03-29
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多