Превращение выражений foreach в функцию - PullRequest
0 голосов
/ 07 января 2012

У меня этот код (ниже) работает просто отлично, однако всякий раз, когда я пытаюсь «обернуть» его в функцию, например.function systemLoop($series) { ... } Я получаю только Uber Fail.

Я новичок в 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

1 Ответ

1 голос
/ 07 января 2012

Похоже, что ваша проблема с обертыванием в функцию возникает из-за того, что вы не передаете переменную $ systems, что вы можете сделать либо глобальным, либо параметром в вызове функции.Я покажу 2 примера здесь:

Передача $ систем в качестве параметра:

function systemLoop($series, $systems){

Который вы бы назвали так:

systemLoop('super', $systems);

Или пропуск $системы как глобальные:

function systemLoop($series){
    global $systems;

Тогда вы бы назвали функцию следующим образом:

systemLoop('super');

Исходя из того, что это может показаться проблемой, в любом случае вам следует решить проблему 'есть.

...