0

数回ループする必要がある関数がありますが、Cannot redeclare function() というエラーが表示されます。このような関数をループすることはできませんか、それとも関数の問題ですか?

ご協力いただきありがとうございます。

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',));
}
4

3 に答える 3

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,));
}
于 2012-06-14T21:50:58.973 に答える
0

以下に 2 つのスニペットを示します。

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 では、「再宣言できません...」というエラーが生成されます。なぜなら、反復ごとに function を再宣言しているためですsquared()

スニペット 2では、関数を 1 回だけ宣言しています。squared()

どちらのスニペットも関数を 10 回呼び出しますが、違いは宣言されている回数です。これは 1 回しか実行できません。

于 2012-06-14T21:49:35.377 に答える
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']));
}
于 2012-06-14T22:10:31.997 に答える