2010-06-15 13 views
2

쉬운 방법이있을 것이라고 확신하지만, 지금 당장 생각할 수 없습니다. 배열 함수를 검색하거나 배열을 검색하고 특정 속성 값을 가진 항목을 찾을 수있는 함수가 있습니까? 예 :PHP : 배열의 특정 속성 값을 가진 요소 찾기

$people = array(
    array(
    'name' => 'Alice', 
    'age' => 25, 
), 
    array(
    'name' => 'Waldo', 
    'age' => 89, 
), 
    array(
    'name' => 'Bob', 
    'age' => 27, 
), 
); 

어떻게 Waldo를 찾고 얻을 수 있습니까?

function SearchArray($array, $searchIndex, $searchValue) 
{ 
    if (!is_array($array) || $searchIndex == '') 
     return false; 

    foreach ($array as $k => $v) 
    { 
     if (is_array($v) && array_key_exists($searchIndex, $v) && $v[$searchIndex] == $searchValue) 
      return $k; 
    } 

    return false; 
} 
:

foreach ($people as $i => $person) 
{ 
    if (array_key_exists('name', $person) && $person['name'] == 'Waldo') 
     echo('Waldo found at ' . $i); 
} 

는 그런 다음 같은 일반적인 용도의 함수로 이전 조각을 만들 수 있습니다 : 다음으로

답변

1

당신이 그것을 수행하는 방법 일반적인 생각을 가지고 니펫을

다음과 같이 사용하십시오.

$foundIndex = SearchArray($people, 'name', 'Waldo'); //Search by name 
$foundIndex = SearchArray($people, 'age', 89); //Search by age 

그러나 함수가 모두 false로 평가 0과 거짓을 반환 할 수 있습니다로주의 (같은 것을 사용하는 경우 ($ foundIndex! == false)를 또는 거짓 ($ foundIndex ===) 경우).

+0

좋은 기능입니다. 함수를'function SearchArray (array $ array, ...')로 선언하고 생각은'is_array' 체크를 건너 뛰겠습니다. – Svish

+0

네,하지만 PHP 5.1 이상이 필요합니다. – AlexV

+0

나는 다른 옵션이 없다는 것을 알고 있지만 여전히 데이터를 반복 할 필요가있는 것은 어리 석다. – danger89

0
function findByName($array, $name) { 
    foreach ($array as $person) { 
     if ($person['name'] == $name) { 
      return $person; 
     } 
    } 
} 
0
function getCustomSearch($key) { 
    foreach($people as $p) { 
     if($p['name']==$searchKey) return $p 
    } 
} 

getCustomSearch('waldo'); 
관련 문제