【问题标题】:Turning foreach statements into a function, issue将 foreach 语句转换为函数,发出
【发布时间】:2012-02-04 23:08:31
【问题描述】:

我的这段代码(如下)工作得很好,但是每当我尝试将它“包装”在一个函数中时,例如。 function systemLoop($series) { ... } 除了超级失败,我一无所获。

我是 PHP(以及此级别的编码)和多维数组的新手。所以让它作为一个函数工作对我来说更加陌生。但是,由于我有“几个”系统系列阵列要经过,我认为将它放在一个函数中可能是一个更好的解决方案。所以我所要做的就是打电话给systemLoop("hyper"); systemLoop("business");

你能帮忙吗?通过尝试将其转换为功能,我是否在做正确的事情?如果我在正确的步骤上,我是否有可能排除使功能按预期工作的步骤?

$series = "super";  
foreach ( $systems[$series] as $names => $name ) {
    echo "<ul>";
    if (is_array($name)){
        echo "<h2>$names => $name</h2>";

        foreach( $systems[$series][$names] as $details => $detail ){
            if (is_array($detail)){}else{
                echo "<h3>$details => $detail</h3>";
            }
        }

        foreach( $systems[$series][$names]['components'] as $components => $component ){
            if(is_array($component)){

                foreach( $systems[$series][$names]['components']['cpu'] as $part => $specs ){
                    echo "<li>cpu $part => $specs</li>";
                }//ends foreach

            }else{
                echo "<li>$components => $component</li>";
            }//ends if is_array
        }// ends foreach
    }else{
        echo "<li>$name</li>";
    }//ends if is_array
    echo "</ul>";
    echo "<hr/>";
}//ends foreach

【问题讨论】:

  • $systems[$series][$names] 应在整个 foreach 循环中替换为 $name
  • "nothing but uber fail" 并没有真正告诉我们问题出在哪里。具体是什么问题/症状?
  • @cbuckley - 如果我这样做了,foreach 不会按预期运行。
  • @OliCharlesworth 我试图让这段代码作为一个函数工作。如果我把它包起来,什么都不会发生。我不知道我是否缺少一个步骤。我只是找不到解决方案。
  • 如果你将逻辑封装在一个函数中,你是把$systems变量也传递进去,还是让它成为全局变量?看看variable scope

标签: php arrays function foreach multidimensional-array


【解决方案1】:

听起来您将其包装在函数中的问题来自于未传递 $systems 变量,您可以在函数调用中将其作为全局或参数进行。我将在这里展示 2 个示例:

将 $systems 作为参数传递:

function systemLoop($series, $systems){

你会这样称呼:

systemLoop('super', $systems);

或将 $systems 作为全局变量传递:

function systemLoop($series){
    global $systems;

然后你会这样调用函数:

systemLoop('super');

从听起来可能的问题来看,任何一种方式都应该可以解决您遇到的问题。

【讨论】:

  • 添加 $systems 全局变量是一种享受。我知道这是我错过的一件简单的事情。非常感谢:)。
  • 我建议不要使用全局值,而是将值传入。如果您遇到错误,这将使“跟踪数据”变得更容易,并清楚说明 $systems 的运行时间修改。
  • @Fleep 传递的值会像“systemLoop($series, $systems)”吗?现在完美地添加全球作品以及我希望它如何。我不是不同意,我只是不知道传递值是什么......
  • 是的,传递值——将值作为参数传递——如我的第一个示例所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多