2013-04-25 2 views
1
foreach($items as $item) { 
    $taskid = (int) $goal['goal_id']; 
    $items[$i]['tasks'] = array(); 
    $items[$i]['tasks'] = array_filter($tasks, function($task, $taskid){  
    return $task['task_id'] == $taskid; 
    }); 

왜 $ taskid가 array_filter 함수에 전달되지 않고 내에서 반향 될 경우 null을 반환하지만 설정 직후 에코이면 올바른 값을 제공합니다. 변수 범위는array_filter에 전달할 때 매개 변수가 손실되었습니다.

foreach($items as $item) { 
    $taskid = (int) $goal['goal_id']; 
    echo $taskid; 

내가 수동으로

return $task['task_id'] == 2; 

지침이

+1

어디에서 $ tasks를 설정합니까? – miah

+0

$ tasks는 이전에 설정 한 배열입니다. ti를 덤프하고 상호 작용할 수 있습니다. 내가 사용한다면 return $ task [ 'task_id'] == 2; 모두 정상적으로 작동합니다. –

+0

하지만 내가 할 때 : - echo $ taskid; return $ task [ 'task_id'] == $ taskid; $ taskid가 비어 있습니다. –

답변

5

문제를 평가, 즉 값을 설정 한 경우에도 작동 정수

함수의 반환 일부 무엇이든지 돌아갑니다이다 함수 인수.

먼저 array_filter는 인수가 하나 인 함수가 필요하며 그 인수는 배열의 위치에있는 값입니다. 키를 처리하지 않습니다.

익명 함수 외부에 $taskid = (int) $goal['goal_id'];을 설정하면 array_filter가 인수 하나만 전달하기 때문에 null 인 동일한 이름의 로컬 변수가 있습니다.

foreach($items as $item) { 
    $taskid = (int) $goal['goal_id']; 
    $items[$i]['tasks'] = array(); 
    # Per the OP, you can pass the necessary variable in via 'use' 
    $items[$i]['tasks'] = array_filter($tasks, function($task) use($taskid){ 
    return $task['task_id'] == $taskid; 
    }); 
} 
0

array_filter 함수는 배열 값을 콜백 함수에 하나씩 전달합니다. 당신은 시도하고있는 것처럼 익명 콜백 함수로 다른 매개 변수를 전달할 수 없습니다.

유효한 예는 다음과 같습니다

Array ([0] => Bob [1] => Sam) 
3

덕분에 사람이 지적은 vairiable 범위와는 함수 클로저에 참조하여 해결할 수있을만큼 쉬웠다 익명 함수이었다 일단

$array = ["Bob","Sam","Jack"]; 
print_r(
    array_filter(
     $array, 
     function($value) { 
      return ($value !== 'Jack'); 
     } 
    ) 
); 

돌아갑니다.

$items[$i]['tasks'] = array_filter($tasks, function($task) use(&taskid){  
    return $task['task_id'] == $taskid; 
    }); 
관련 문제