2012-09-20 13 views
1

爲了傳遞數組中的create_function()的代碼,將它傳遞給參數作品,陣列嵌入在create_function()的代碼在PHP

$array = array('a', 'b', 'c'); 

$func = create_function('$arr', ' 
      foreach($arr as $var) echo "$var<br />"; 
     '); 

$func($array); 

但我想嵌入在陣列代碼直接像eval()的能力。像這樣,

$array = array('a', 'b', 'c'); 
eval('foreach($array as $var) echo "$var<br />";'); 

但是,這不起作用。

$array = array('a', 'b', 'c'); 

$func = create_function('', ' 
      foreach(' . $array . ' as $var) echo "$var<br />"; 
     '); 

$func(); 

那麼我該怎麼做呢?感謝您的信息。

回答

2

如果你堅持create_function而不是lambda functions

$func = create_function('', ' 
    foreach(' . var_export($array, true) . ' as $var) echo "$var<br />"; 
'); 

您需要的數組中的PHP解析器的(有效)字符串表示。 var_export規定。
但是Berry Langerak's answer是要走的路。

+0

謝謝。這回答了我的問題。 – Teno

1

當使用PHP> = 5.3時,可以使用匿名函數而不是create_function。匿名函數可以「使用」來自外部作用域的變量。

<?php 
$array = array('a', 'b', 'c'); 

$func = function() use($array) { 
    foreach($array as $value) { 
     echo $value; 
    } 
}; 

$func(); 
+0

謝謝,它在我的測試服務器上運行得非常好。我使用的一些服務器不幸地位於PHP v5.3以下。 – Teno

+2

@Teno我很抱歉地告訴你,但在這種情況下,你使用的一些服務器使用的軟件不受支持,應該升級。 PHP 5.2的支持截止日期爲2010年12月;) –

+0

哦,真的......他們是免費的共享主機,所以我無法做任何事情。謝謝你告訴我。 – Teno

0

使用閉包:

$function = function($array){ 

    foreach($array as $var){ 

     // do your stuff 

    } 

}; 

$function($yourArray); 
+0

感謝您的輸入。 – Teno

-1

我張貼這種只爲教育目的(這是非常不好的做法):

<?php 

$array = array('a', 'b', 'c'); 

$func = create_function('', ' 
      global $array; 
      foreach($array as $var) echo "$var<br />"; 
     '); 

$func(); 

爲什麼會這樣awfull?

  • 全局變量
  • 醜陋的方式來創建一個功能

如果您的PHP版本至少爲5.3,然後使用lambda函數。請參閱@Berry Langerak回答

+0

我不是全球變量的忠實粉絲。儘管感謝您的回答。 – Teno

+0

爲什麼downvotes?它做這項工作,我解釋了這些缺點。 –