Comment puis-je passer un seul argument supplémentaire pour array_map de rappel en PHP?
Comment puis-je passer une seul argument supplémentaire à array_map
de rappel? Dans mon exemple, j'aimerais passer $smsPattern
(comme deuxième argument, après l'élément courant dans $featureNames
) à la fonction array_map
avec $getLimit
fermeture:
$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));
Avec ce code j'obtiens un étrange avertissement:
Avertissement: array_map() [function.tableau-carte]: Argument n ° 3
être un tableau.
De cours di raison est pour la réutilisation des $getLimit
fermeture avec une autre expression régulière comme $smsPattern
. Merci.
Pourquoi ne pas utiliser array_walk() au lieu de cela, vous pouvez alors passer d'un argument supplémentaire
De quoi êtes-vous à l'aide de
la suppression des valeurs nulles.
Ok! Je ne savais même pas que array_filter travaillé sans rappel. Maintenant je sais, et je l'ai ajouté à ma réponse.
De quoi êtes-vous à l'aide de
array_filter
?la suppression des valeurs nulles.
Ok! Je ne savais même pas que array_filter travaillé sans rappel. Maintenant je sais, et je l'ai ajouté à ma réponse.
OriginalL'auteur gremo | 2012-06-03
Vous devez vous connecter pour publier un commentaire.
C'est exactement ce que les fermetures sont sur:
Si vous voulez généraliser à d'autres modèles, envelopper la fonction de création en un autre fonction:
Et ici, il est enveloppé comme une fonction anonyme:
OriginalL'auteur Emil Vikström