foreach爆炸后停止

时间:2015-12-30 05:44:25

标签: php foreach explode

我很想知道为什么foreach在爆炸后停止,它只返回第一个结果:

$disabled_functions = ini_get('disable_functions');

print_r($disabled_functions);

$disFunctionsNoSpace = str_replace(' ', '', $disabled_functions);

// put them in an array
$disFunctions = explode(',', $disFunctionsNoSpace);

print_r($disFunctions);

/*
var_dump($disFunctions);
OUTPUT
array (size=33)
0 => string 'curl_multi_exec' (length=15)
1 => string ' parse_ini_file' (length=15)
2 => string ' symlink' (length=8)
3 => string ' shell_exec' (length=11)
4 => string ' proc_close' (length=11)
Etc
*/

$this->disFunctions = $disFunctions;

//print_r($this->disFunctions);

// get file content of the uploaded file (renamed NOT the temporary)
$cFile = file_get_contents($this->fileDestination, FILE_USE_INCLUDE_PATH);

//var_dump($cFile);

foreach($this->disFunctions as $kkeys => $vvals)
{
    echo $kkeys.' is '.$vvals.'<br />';

    if(preg_match('#'.$vvals.'#i', $cFile))
    {
        echo 'exists<br />';

        return true;
        //echo count($this->aErrors).'<br />';
        //return false;
    } 
    else 
    {
        echo $vvals.'NOT FOUND<br />';
        return false;
    }
} // end foreach

结果是:0是curl_multi_exec
curl_multi_execNOT FOUND

我希望获得所有键和值列表。

感谢您的支持

1 个答案:

答案 0 :(得分:3)

问题是你的循环中有return

foreach循环中,您有if / else个阻止。无论if是否满足,您return的值为true的{​​{1}},if的{​​{1}}。

false会导致循环执行死亡。它还会停止您所在的任何功能(或方法),或者如果您不在函数中,则停止当前脚本。 From the docs:

  •   

    如果在函数内调用,else语句会立即结束当前函数的执行,并将其参数作为函数调用的值返回。 return也会结束eval()语句或脚本文件的执行。

  •   

    如果从全局范围调用,则结束当前脚本文件的执行。如果当前脚本文件为includedrequired,则控制权将被传回到调用文件。此外,如果当前脚本文件为included,则return的值将作为include调用的值返回。如果从主脚本文件中调用return,则脚本执行结束。如果当前脚本文件由return中的auto_prepend_fileauto_append_file配置选项命名,则该脚本文件的执行将结束。

基于your comment(以及您正在使用return的事实),您的循环位于方法中。因此,php.ini会立即停止循环,停止方法,并根据具体情况返回$thisreturn。它永远不会到达true中的第二项。