2012-06-14 25 views
0

我有一個函數,我必須循環幾次,但我得到一個錯誤,無法重新聲明函數(),是不可能循環這樣的函數,或者它只是一個問題在我的功能,重置函數PHP

感謝您的幫助。

while($i=0){ 
function gbFunc1($elem){ return (string)$elem['companyCode'][0]; } 
    function gbFunc2($elem){ return (string)$elem['locationType'][0][0]->locationDescription->name; } 
    function gbFunc3($elem){ return (string)$elem['vehicleRentalPrefType'][0]; } 
    function gbFunc4($elem){ return (string)$elem['customerReferenceInfo'][0]->referenceQualifier; } 
    function gbFunc5($elem){ return (string)$elem['customerReferenceInfo'][0]->referenceNumber; } 
    function vFunc3($elem){ return (float)$elem['rateAmount'][0][1]->rateAmount; } 

    $new = Fx::GroupBy($results_array, array('func:gbFunc1', 'func:gbFunc2', 'func:gbFunc3', 'func:gbFunc4', 'func:gbFunc5'), array(null, null, null, null, 'func:vFunc3',)); 
} 
+7

發佈您的代碼,請。 – jedwards

+1

不要在循環中聲明你的函數。外。更好的是:不是處理代碼(人們通常有一個像functions.php這樣的文件,其中包含所有函數聲明)。 – Wrikken

+0

但我需要在循環中使用它。 – thegrede

回答

5

您需要在循環之外聲明您的函數,否則每次循環迭代它都會重新聲明函數。

function gbFunc1($elem){ return (string)$elem['companyCode'][0]; } 
function gbFunc2($elem){ return (string)$elem['locationType'][0][0]->locationDescription->name; } 
function gbFunc3($elem){ return (string)$elem['vehicleRentalPrefType'][0]; } 
function gbFunc4($elem){ return (string)$elem['customerReferenceInfo'][0]->referenceQualifier; } 
function gbFunc5($elem){ return (string)$elem['customerReferenceInfo'][0]->referenceNumber; } 
function vFunc3($elem){ return (float)$elem['rateAmount'][0][1]->rateAmount; } 

while($i=0){ 
    $gbF1 = gbFunc1($elem); 
    $gbF2 = gbFunc2($elem); 
    $gbF3 = gbFunc3($elem); 
    $gbF4 = gbFunc4($elem); 
    $gbF5 = gbFunc5($elem); 
    $vF3 = vFunc3($elem); 


    $new = Fx::GroupBy($results_array, array($gbF1, $gbF2, $gbF3, $gbF4, $gbF5), array(null, null, null, null, $vF3,)); 
} 
+0

函數返回值存儲在哪裏? – Gntem

0

這裏有兩個片段:

1)

for($i=0; $i<10; $i++) 
{ 
    function squared($a) 
    { 
     return($a * $a); 
    } 
    $foo[$i] = squared($bar[$i]); 
} 

2)

function squared($a) 
{ 
    return($a * $a); 
} 

for($i=0; $i<10; $i++) 
{ 
    $foo[$i] = squared($bar[$i]); 
} 

片段1將產生 「不能重新聲明......」 的錯誤。因爲在每次迭代中,您都要重新聲明您的功能squared()

Snippet 2 only declaredsquared()函數一次。

這兩個片段都會調用該函數10次,區別在於它聲明瞭多少次 - 這隻能發生一次。

0

或者乾脆:

function groupBy($elem){ 
    return array('companyCode'=>$elem['companyCode'][0], 
        'locationType'=>$elem['locationType'][0][0]->locationDescription->name, 
        'vehicleRentalPrefType'=>$elem['vehicleRentalPrefType'][0], 
        'referenceQualifier'=>$elem['customerReferenceInfo'][0]->referenceQualifier, 
        'referenceNumber'=>$elem['customerReferenceInfo'][0]->referenceNumber, 
        'rateAmount'=>$elem['rateAmount'][0][1]->rateAmount); 
} 
$gb=groupBy($elem); 
while($i=0){ 
    $new = Fx::GroupBy($results_array, array($gb['companyCode'], 
              $gb['locationType'], 
              $gb['vehicleRentalPrefType'], 
              $gb['referenceQualifier'], 
              $gb['referenceNumber'], 
              $gb['rateAmount']), 
             array(null, null, null, null, $gb['rateAmount'])); 
}