2013-06-07 2 views
0

나는이 유사 배열에서 일하고 있어요는 :검색 배열 및 반환 모든 키 및 값

내가 "이름"배열에 검색 할
$users = array( 
    array('name' => "John", 'lastname' => 'doe'), 
    array('name' => "smith", 'lastname' => 'Jones'), 
); 

는 "LASTNAME"

예를 반환 & : 배열을 검색하는 동안 "Doe"를 반환 값으로 사용하는 동안 이름이 & 인 "john"이 있습니다.

나는 다음과 같은 기능을하지만

function my_function($array, $name) { 
     foreach($array as $name) { 
      ..... 
     } 
} 

my_function($users, 'John'); 

을 시도했지만 나는 "foreach는 대한 공급 잘못된 인수()"오류가 발생합니다.

올바른 방법은 무엇입니까?

+1

비트와 코드 조각이다 "미상"얻을 다음 코드로 더블 $ 이름의 사용

입니다 벌금. 일부 정보에 오류가 있습니다. 변수'$ name'을 재사용하는 것은 문제입니다. – deceze

답변

0

문제는 작업을해야 보여 내가 입력이 "존"

$users = array( 
    array('name' => "John", 'lastname' => 'doe'), 
    array('name' => "smith", 'lastname' => 'Jones'), 
); 

function my_function($array, $name) { 
    foreach($array as $row) { 
     if($row['name'] == $name) { 
     return $row['lastname']; 
     } 
    } 
} 

echo my_function($users, 'John'); 
0
function my_function($array, $name, $haystackkey, $returnkey) { 

    foreach($array as $key => $item) { 
     if (isset($item[$haystackkey]) && $item[$haystackkey] == $name) { 
      return $item[$returnkey]; 
     }    
    } 

} 

이 '이름'존 '인 요소 $ 배열을 검색하며, 값 OG는'성 '리턴

my_function ($array, 'John', 'name', 'lastname'); 

전화. 물론 다른 두 가지 매개 변수를 사용하지 않으면 마지막 두 매개 변수를 하드 코딩 할 수 있습니다.

이 만 를 선두가 반환 조심하십시오. 목록 또는 결과를 얻으려면 return$result[]=...으로 대체하십시오.

0

배열 감소를위한 예. 가장 효율적인 방법은 아니지만 멋지다.

$found = array_reduce($users, function ($found, array $candidate) use ($name) { 
    return $found ?: ($candidate['name'] == $name ? $candidate['lastname'] : null); 
}); 
+0

그건 ** 멋진 **입니다. 그러나 성능 악몽을 버려야한다는 것을 이해하고 심지어 적응하거나 재사용하는 것이 고통 스럽습니다. 따라서 프로덕션 코드에서 절대 사용하지 않을 것입니다. 어쨌든, 좋은 코드 :) –

+0

적어도 이러한 배열 반복 질문으로 손가락을 구부려 야합니다 ...;) 그리고 작은 배열의 경우 성능은 실제로 "악몽"이 아닙니다. Functional PHP를 사용하여, 나는'F first ($ users, function ($ name) {$ name []] == $ name; , 왜냐하면 그것은 아주 작기 때문에 그것에 대한 새로운 함수를 만들 필요가 없습니다 ... :) – deceze

+0

나는 당신이 견고한 C++ 배경을 가지고 있다고 가정합니까? PHP 사람들은 당신보다 훨씬 덜 우아하고 길어진 코드를 작성하는 경향이 있지만, 전기 톱의 역풍처럼 느끼지는 않습니다. –