我如何向array_map
回调函数传递一个额外的参数? 在我的示例中,我想将$smsPattern
作为第二个参数(在$featureNames
中当前元素之后)传递给使用闭包$getLimit
的array_map
函数:
$features = $usage->getSubscription()->getUser()->getRoles();
// SMS regular expression in the form of ROLE_SEND_SMS_X
$smsPattern = '/^ROLE_SEND_SMS_(?P<l>\d+)$/i';
// Function to get roles names and X from a role name
$getNames = function($r) { return trim($r->getRole()); };
$getLimit = function($name, $pattern) {
if(preg_match($pattern, $name, $m)) return $m['l'];
};
// Get roles names and their limits ignoring null values with array_filter
$featuresNames = array_map($getNames, $features);
$smsLimits = array_filter(array_map($getLimit, $featureNames, $smsPattern));
使用这段代码会出现一个奇怪的警告:
Warning: array_map() [function.array-map]: Argument #3 should be an array.
当然,原因是由于将 $getLimit
闭包与另一个正则表达式如 $smsPattern
重复使用。谢谢。
array_filter
做什么? - Emil Vikström