Wie kann ich passiere ein einziges zusätzliches argument, um array_map Rückruf in PHP?
Wie kann ich passiere ein einziges zusätzliches argument zu array_map
Rückruf? In meinem Beispiel würde ich gerne weitergeben $smsPattern
(als zweites argument an, nach dem aktuellen element in $featureNames
), um die Funktion array_map
mit $getLimit
Verschluss:
$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));
Mit diesem code bin ich immer eine seltsame Warnung:
Achtung: array_map() [function.array-Karte]: Argument #3 sollte
ein array ist.
Natürlich di Grund ist für die Wiederverwendung $getLimit
Verschluss mit einem anderen regulären Ausdruck wie $smsPattern
. Danke.
Warum nicht mit array_walk() statt, dann können Sie ein zusätzliches argument
Was verwenden Sie
entfernen von null-Werten.
Ok! Ich wusste gar nicht, dass array_filter funktioniert ohne Rückruf. Jetzt weiß ich, und ich habe es zu meiner Antwort.
Was verwenden Sie
array_filter
?entfernen von null-Werten.
Ok! Ich wusste gar nicht, dass array_filter funktioniert ohne Rückruf. Jetzt weiß ich, und ich habe es zu meiner Antwort.
InformationsquelleAutor gremo | 2012-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist genau das, was closures sind etwa:
Wenn Sie generalisieren wollen, auf anderen mustern, wickeln Sie die Erstellung einer Funktion in anderen Funktion:
Und hier ist es eingewickelt, wie eine anonyme Funktion:
InformationsquelleAutor Emil Vikström