2014-05-17 71 views
1

我試圖從數組中提取值,並將它們傳遞給將要使用它們的函數。在這個例子中,我已經在函數內部使用了echoPHP從數組中提取值並將它們傳遞給函數

我正在使用提取來獲取所有值。

事情是,這不會工作。你看到這可以做到嗎?在PHP

<?php 

$my_array = array("a" => "Prince", "b" => "Funky"); // around 10 more 

$g = extract($my_array); 

foo($g); 

function foo($g) { 
    echo 'My name is '.$a.', and I am '.$b; 
} 

?> 
+1

做你正在尋找['call_user_func_array()'](http://php.net/call_user_func_array) ? – kero

+0

@kingkero其實,我正在嘗試與你的建議。它是如何完成的?儘管正確地遵循了示例,但我仍然收到一些錯誤或其他錯誤。 – Norman

回答

1

功能有不同的範圍,所以變量$a$b等未提供的函數中。試圖在函數內使用它們會導致未定義的變量通知(如果您是enable error reporting,那就是)。

現在,您將返回值extract()(這是解析的變量的總數)存儲到您的函數中。你想要的值而不是,那麼改變你的功能,像這樣:

function foo($array) { 
    extract($array); 
    echo 'My name is '.$a.', and I am '.$b; 
} 

請注意,我已經搬到函數內部的extract()電話。這樣,你不會用隨機變量來污染全局範圍(這可能會產生不希望的結果,並且會讓你無法正常調試)。

現在你可以打電話給你的功能,像這樣:

foo($my_array); 

輸出:

My name is Prince, and I am Funky 

Demo

這是更好地避免extract()完全,雖然。請參閱:What is so wrong with extract()?

+0

爲什麼要避免提取? – baldrs

+0

@baldrs:查看編輯。 –

+0

與dont-ever-use-eval相同的參數,尤其是用戶輸入。 – baldrs

-2

你可以通過你的數組中的功能與使用任何其他變量

$my_array = array("a" => "Prince", "b" => "Funky"); // around 10 more 

foo($my_array); 

function foo($arrayData) 
{ 
    echo 'My name is '.$arrayData['a'].', and I am '.$arrayData['b']; 
} 
相關問題