2015-12-30 39 views
-1

我wonderring爲什麼的foreach停止爆炸後之後,只返回的第一個結果:的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

我希望得到所有的鍵和vals列表。

感謝您的支持

+1

爲什麼你的返回值爲true並在if和else語句中分別返回false? –

+1

因爲'return true'和'return false'退出函數。一旦你離開功能,你也結束循環。 – Barmar

+0

OHHH,對不起,我忘了刪除它們,它是一個函數 –

回答

3

的問題是,你有你的return循環中。

在您的foreach循環中,您有一個if/else塊。無論是否滿足ifreturn值(trueif,falseelse)。

return殺死你的循環執行。它還會停止您所在的任何函數(或方法),或者如果您不在函數中,則會停止當前的腳本。 From the docs:

  • 如果在一個函數中調用,return語句,將立即結束此函數的執行,並返回其參數的函數調用的值。 return也會結束執行eval()語句或腳本文件。

  • 如果從全球範圍內調用,則當前腳本文件的執行結束。如果當前腳本文件是includedrequired,則控制權將被傳回給調用文件。此外,如果當前腳本文件爲included,則給予return的值將作爲include調用的值返回。如果從主腳本文件內調用return,則腳本執行結束。如果當前腳本文件是由php.ini中的auto_prepend_fileauto_append_file配置選項命名的,那麼該腳本文件的執行結束。

基於your comment(和您使用$this的事實),你的循環是一種方法。 return因此立即停止循環,停止方法,並視情況返回truefalse。它永遠不會到達$this->disFunctions中的第二項。