16
단일 추가 인수을 array_map
콜백으로 전달할 수 있습니까? 내가 이상한 경고를 받고 있어요이 코드PHP에서 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));
: 내 예제에서 나는 $getLimit
폐쇄와 기능 array_map
에 ($featureNames
에서 현재 요소 후, 두 번째 인수로) $smsPattern
를 전달하고 싶습니다
경고 : array_map() [function.array-map] : 인수 3은 을 배열로 사용해야합니다.
물론 클로저를 $smsPattern
과 같은 다른 정규식으로 다시 사용하는 이유는 물론입니다. 감사. 당신이 다른 패턴으로 일반화 에 다른 기능 함수 생성을 포장 할 경우
$getLimit = function($name) use ($smsPattern) {
if(preg_match($smsPattern, $name, $m)) return $m['l'];
};
$smsLimits = array_filter(array_map($getLimit, $features));
:
function patternMatcher($pattern) {
return function($name) use ($pattern) {
if(preg_match($pattern, $name, $m)) return $m['l'];
};
}
$getLimit = patternMatcher($smsPattern);
$smsLimits = array_filter(array_map($getLimit, $features));
를 그리고 여기있다
왜 array_walk()를 사용하지 않는가? 대신에, 당신은 추가 인수를 넘겨 줄 수 있습니다. –
'array_filter'를 어떻게 사용하고 있습니까? –
@ EmilVikström이 Null 값을 제거합니다. – gremo