2015-09-06 264 views
2

我越來越熟悉PHP匿名函數和閉包,我需要使用閉包或匿名函數傳遞給array_walk但在這裏的附加參數是一個簡單的代碼塊:array_walk匿名函數

 $array = array(1, 2, 3, 4, 5, array(1, 2)); 

     $callback = function(&$value, $key) 
     { 
      $value = $key*$value; 
     }; 

     var_dump($array, array_walk_recursive($array, $callback), $array); 

這是非常簡單的,因爲它不過是說我想改變功能如下:

 $callback = function(&$value, $key, $multiplier) 
     { 
      $value = $key*$value*$multiplier; 
     }; 

如何傳遞乘數的匿名函數?或者,如果它應該是一個封閉,它怎麼能做到。

因爲如下是給我的錯誤:

array_walk_recursive($array, $callback(5)) 

我知道array_walk有一個額外的PARAM $ USER_DATA可以通過,但我需要它具有關閉或匿名函數。

回答

3

PHP的閉包可以被用於此:

<?php 
$array = array(1, 2, 3, 4, 5, array(1, 2)); 
$multiplier = 5; 

$callback = function(&$value, $key) use ($multiplier) { 
    $value = $key*$value*$multiplier; 
}; 

var_dump($array, array_walk_recursive($array, $callback), $array); 

顯然$multiplier可以接收非靜態值,如ta查詢參數或結果o計算。只要確保驗證並輸入cast以保證數值。

+0

謝謝。正是我需要的! – Combinu

1

您可以使用兩個選項:

$mltpl = 10; 
$callback = function(&$value, $key) 
{ 
    global $mltpl; 
    $value = $key*$value*$mltpl; 
}; 

或者

$mltpl = 10; 
$callback = function(&$value, $key) use ($mltpl) 
{ 
    $value = $key*$value*$mltpl; 
}; 
+0

感謝您的幫助。解決了! – Combinu