2013-11-28 30 views
-2

將數組追加到數組有問題。 首先我初始化空數組,然後我想把元素放在裏面。追加elts後php數組爲空

但是,結果最後是空數組。

$aditivs = array(); 

function handle_Aditiv($ArrVal){ 
    $id_aditiv = $ArrVal['id']; 
    $code = $ArrVal['code']; 
    $arrLocal = array(); 
    $arrLocal[] = $id_aditiv; 
    $arrLocal[] = $code; 
    $aditivs [] = $arrLocal; 
//var_dump($aditivs); 
echo "Adt : $id_aditiv,$code \r\n"; 
} 

var_dump($aditivs); //this print out empty array 

的insted的:

$aditivs [] = $arrLocal; 

我也用這個,但結果是一樣的

array_push($aditivs, $arrLocal); 

那麼,什麼我做錯了?

+3

你應該在PHP中閱讀** variables'scope **。如果你的代碼是javascript,你的代碼確實可以工作,但這不是......另外,你甚至不會在任何地方調用你的函數!它被執行了嗎? –

+0

$ aditivs是全球性的,所以你不能改變它 – KiraLT

+0

@Lukas否'$ aditivs'不是全球性的 – hek2mgl

回答

0

test.php的:

<?php 
$aditivs = array(); 


function handle_Aditiv($ArrVal){ 
    Global $aditivs; 
    $aditivs[] = array($ArrVal['id'], $ArrVal['code']); 
    return(0); 
} 

$arr = array('id'=>1, 'code'=>"code"); 
handle_Aditiv($arr); 
var_dump($aditivs); 

?> 

運行:

>php test.php 

輸出:

array(1) { 
    [0] => 
    array(2) { 
    [0] => 
    int(1) 
    [1] => 
    string(4) "code" 
    } 
} 

但是:

從技術上講,最好的方法是使用reference

<?php 
$aditivs = array(); 


function handle_Aditiv(&$accumulator, $input){ 
    $accumulator[] = array($input['id'], $input['code']); 
} 

$arr = array('id'=>1, 'code'=>"code"); 
handle_Aditiv($aditivs, $arr); 

var_dump($aditivs); 

?> 

對於你的情況沒有什麼區別,但在長期,複雜的代碼,這是使思想清晰得多。

+0

'全局'是我一直想念的:D thx – 5er