【发布时间】:2026-01-26 16:45:01
【问题描述】:
如何将单个附加参数传递给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));
使用这段代码,我收到了一个奇怪的警告:
警告:array_map() [function.array-map]:参数 #3 应该 是一个数组。
当然,原因是为了将$getLimit 闭包与另一个正则表达式(如$smsPattern)重用。谢谢。
【问题讨论】:
-
为什么不使用array_walk(),那么你可以传递一个额外的参数
-
你用
array_filter做什么? -
@EmilVikström 删除空值。
-
好的!我什至不知道 array_filter 没有回调就可以工作。现在我知道了,我也将它添加到我的答案中。
标签: php arrays callback closures array-map