2012-11-26 2 views
0

이것은 이전 질문과 관련이 있습니다. 제가 제기 한 문제에 대한 해결책으로 누군가가 친절하게 제공 할 수있는 코드를 제공했는지 묻습니다.PHP : array_filter와 함께 작업

지금까지 array_filter가 중복 행을 검색하는 데 사용되기 전까지 게시 된 대부분의 코드를 이해합니다.

참고로 이것은 제가 제기 한 이전 질문입니다. PHP: Searching through a CSV file the OOP way

여기서 나는 무엇이 진행되고 있는지 완전히 이해하는 데 어려움을 겪고 있습니다.

public static function getRowsWithDuplicates($columnIndex) { 
    $values = array(); 
    for ($i = 0; $i < $this->_dataSet->getRowCount(); ++$i) { 
     $values[$this->_dataSet->->getValueAt($i, $columnIndex)][] = $i; 
    } 

    return array_filter($values, function($row) { return count($row) > 1; }); 
} 

첫째; 그 코드를 보면 $ values가 연관 배열 인 것처럼 보입니다. 그렇다면 array_filter가 중복 값이있는 행을 반환하는 방식은 무엇입니까?

나는이 코드를 이해하기 위해 array_filter가 어떻게 진행되는지 완전히 이해하지 못한다고 생각합니다. array_filter는 배열의 각 값을 해당 매개 변수에 제공된 함수로 전달한 다음 해당 함수에서 값을 반환하지만이 특정 예에서는 array_filter 내부에서 정확히 무슨 일이 일어나는지 이해하지 못한다고 생각합니다.

누군가가 프로세스 단계를 단계별로 이해할 수있는 수준에서 설명 할 수 있다면 감사하게 생각합니다. 그래서 위 코드에서 어떤 일이 일어나고 있는지 더 잘 이해할 수 있습니다. 결과.

$ values가 연관 배열 인 경우 연관 배열의 속성을 활용하여 중복 행을 반환하는 코드는 어떻게됩니까?

필자는 이해하기 힘든 기능 자체가 아니라이 특정한 경우에 어떻게 사용되었는지 생각합니다.

return count($row) > 1; 

값을 반환 할 때 비교 연산자가 어떻게 작동하는지 이해할 수 없습니다. 하나 이상의 행이있을 때 TRUE를 리턴하고, array_filter가 TRUE 문을 평가하고 그에 연관된 값을 리턴한다고 말하는 것입니까?

function ($ row)에서 $ row로 전달되는 것은 무엇입니까?

여러분도 알다시피, 나는 답을하는 것보다 더 많은 질문을 가지고 있습니다. 오히려 너무 오랜 시간을 보내고 잘못된 결론을내는 것보다 나에게 설명을 해줄 것입니다.

$ row는 array_filter가 반복하는 배열 값을 전달하는 데 사용하는 매개 변수입니까?

편집 : 이것은 내 수정 된 질문입니다.이 질문은보다 구체적이고 답변을 찾고있는 요점입니다.

array_filter가 수행하는 작업을 이해하지만 어떻게 처리하는지 이해할 수 없습니다. 코드의 원래 포스터 인 Jon은 다음과 같이 썼습니다. "이 코드는 키가 CSV 데이터의 값인 배열을 반환하며 값은 각 값이 나타나는 행의 0부터 시작하는 인덱스가있는 배열입니다."

이것은 내가 이해하지 못하는 부분입니다. $ 값은 각 값이 나타나는 행의 0부터 시작하는 인덱스를 갖는 배열의 값을 갖습니다.코드가 모든 값이 나타나는 각 행의 인덱스를 찾아서 $ 값 내에 저장된 배열에 저장하는 방법은 무엇입니까?

for ($i = 0; $i < $this->_dataSet->getRowCount(); ++$i) { 
    $values[$this->_dataSet->->getValueAt($i, $columnIndex)][] = $i; 

가 어떻게 코드가 값을 일치시키기위한 모든 인덱스를 찾아 해당 배열의 키는 값이 배열에 사람들을 넣어 않습니다

그래서 제 질문은 코드의이 부분에 관련 인덱스와 관련이 있습니까?

내가 볼 수없는 중복 값에 대한 전체 검색과 같습니다.

답변

0

array_filter의 콜백은 true 또는 false 중 하나를 반환해야합니다. true을 반환하면 현재 값을 유지해야합니다. false을 반환하면 현재 값을 버려야합니다.

배열의 각 값은 첫 번째 인수 (이 경우 $row)로 콜백 함수에 전달되고, 값을 유지할지 여부를 결정하는 것은 콜백에 달려 있습니다.

+0

이 과정을 많이 이해합니다. 위의 예제에서 함수가 중복 값이있는 행을 검색하는 데 사용되는 방법과 관련이 있습니다. 내가 게시 한 예제에서 어떻게 작동하는지 완전히 확신하지 못합니다. –

+0

글쎄,이 함수는 중복 된 행을 찾는 것이므로 카운트에 둘 이상의 값이있는 행을 찾으려면 필터링해야합니다. –

+0

그 일을하고있는 것을 볼 수는 있지만 어떻게하는지 잘 모르겠습니다. 그것은 이해하려고하는 과정입니다. 중복 된 값을 어떻게 확인합니까? 코드에서 볼 때 중복 된 값을 찾기 위해 배열 -> 검색 -> 프로 시저 프로세스가 표시되지 않습니다. array_filter가 배열을 어떻게 검색합니까? 그것은 루프처럼 반복 할 수 없습니다. –