2012-10-17 54 views
1

我嘗試運行循環內的代碼時出現問題,我的循環由一個函數組成。運行一個內部具有函數的循環

這是我的編碼:

$new = array(1,2,3,4); 
for($i=0;$i<=3;$i++){ 
$val = $new[$i]; 



function myfunction($value) { 
    //Do something 
} 

echo $val; 
} 

的問題是隻有代碼輸出在我的陣列第一值。我很困惑,我是不是想在循環中聲明一個函數?

+2

爲什麼你的循環中有一個函數? – Blender

+2

作爲正確的答案已經給出,爲什麼發生這種情況的一個簡短的通知:你的代碼試圖重新定義函數3次,這是不允許在PHP中。小技巧:在腳本開始時使用'error_reporting(E_ALL);'或者在學習/開發時將其設置在php.ini中 - 使用此設置,您會看到「致命錯誤,嘗試重新定義函數myFunction in ...「 – cypherabe

+0

'for($ i = 0; $ i <= 3; $ i ++){$ val = $ new [$ i];'可以寫成foreach($ new as $ val) {...' –

回答

5

你的代碼最終致命埃羅r,因爲在第二次迭代時它會嘗試重新聲明函數myfunction。這就是爲什麼它只打印數組的第一個值。

爲了避免致命的錯誤,您可以檢查該功能使用function_exists()功能這樣被已經定義:

$new = array(1,2,3,4); 
for($i=0;$i<=3;$i++) 
{ 
    $val = $new[$i]; 
    if(!function_exists('myfunction')) 
    { 
     function myfunction($value) { 
      //Do something 
     } 
    } 
    echo $val; 
} 

PHP是一種腳本語言,它在語法上是正確的內聲明的一個功能循環或內部if語句,但這是一個不好的做法,並可能導致很多錯誤。
最好的辦法是聲明外循環功能,並且,如果需要的話,從這樣一個循環中調用它:

<?php 
function myfunction($value) { 
    //Do something 
} 

$new = array(1,2,3,4); 
for($i=0;$i<=3;$i++) 
{ 
    $val = $new[$i]; 
    myfunction($value); //may you was intended to pass $val here? 
    echo $val; 
} 
+1

我覺得''if(!function_exists('myfunction')) ''應該嵌入到語言規範中。如果有人想在一個循環內部聲明一個函數(這是允許的,*有趣的用法*),他們不應該每次都訴諸同一個樣板。 – William

6

不要聲明函數內循環,在循環之前聲明它,然後調用它的循環中與myFunction($value);

+0

「在...之前或之後聲明它---) – Havelock

+2

Psh,只要遵循編程最佳實踐,您通常首先要聲明您的函數。但是,PHP會讓你在之後聲明它。 = P – Jon

1
  • 聲明環
  • 任外的函數返回從值的功能,或讓該函數輸出數據

例如:

function myfunction($value) { 
    //Do something 
    echo $value; 
} 

$new = array(1,2,3,4); 
for($i=0;$i<=3;$i++) { 
    myfunction($new[$i]); 
} 
5

的功能應該是在一個單獨的程序

$new = array(1,2,3,4); 
for($i=0;$i<=3;$i++) 
{ 
    $val = $new[$i]; 
    myfunction($val) 
    echo $val; 
} 

那麼這是你的函數

function myfunction($value) 
{ 
    //Do something 
} 
+0

謝謝你,我知道我錯過了一些小事,我浪費了一個小時試圖弄清楚,我覺得現在很愚蠢: - D –

0

,是不是寫的方式來做到這一點... 首先聲明循環

外的函數
function myfunction($value) { 
    //Do something 
} 


$new = array(1,2,3,4); 
for($i=0;$i<=3;$i++){ 
    $val = $new[$i]; 
    myfunction($val); //call function where u wanted... here (in your case) 
    echo $val; 
} 
0

我假設你想打印出數組的前4個元素。 做這樣的事情

function myfunction() { 
    $new = array(1,2,3,4); 
    for($i=0;$i<=3;$i++){ 
    $val = $new[$i]; 
    echo $val; 
    } 
} 

myfunction(); 
0

你應該聲明該函數循環

function myfunction($value) {  
    return ($value + 25); // an example 
} 

$new = array(1,2,3,4); 
for($i = 0; $i < count($new); $i++){ 
    echo myfunction($new[$i]); 
} 

你也應該從0迴路設置爲數組的末尾之外,所以如果你有更多的比陣列中的4項代碼應該是確定

-3

你是不是suposed申報循環中的功能...

0

你可以聲明,而不是一個匿名函數:

for ($i=0; $i<=3; $i++) { 
    // code 
    $myFunction = function($value) { /* code */ } 
    $myFunction($val); 
    // code 
}