Как я могу передать один дополнительный аргумент в обратный вызов array_map
? В моем примере я хотел бы передать $smsPattern
(в качестве второго аргумента после текущего элемента в $featureNames
) функции array_map
с $getLimit
closure:
$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
. Спасибо.