¿Cómo puedo pasar un único argumento adicional a array_map
devolución de llamada? En mi ejemplo, me gustaría pasar $smsPattern
(como segundo argumento, después elemento actual de $featureNames
) a la función array_map
con $getLimit
cierre:¿Cómo puedo pasar un único argumento adicional a la devolución de llamada array_map en PHP?
$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));
Con este código estoy recibiendo una advertencia raro:
Advertencia: array_map() [function.array-map]: Argumento # 3 debería ser una matriz.
Por supuesto di razón es para la reutilización de $getLimit
de cierre con una expresión regular como $smsPattern
. Gracias.
¿Por qué no utilizar array_walk() en lugar, entonces puede pasar un argumento adicional –
¿Para qué está usando 'array_filter'? –
@ EmilVikström eliminando valores nulos. – gremo