2010-06-15 42 views
2

我確信有一個簡單的方法可以做到這一點,但我現在無法想到它。是否有一個數組函數或讓我通過數組搜索並找到具有特定屬性值的項目?例如:PHP:在數組中查找具有一定屬性值的元素

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

我怎樣才能找到並獲得沃爾多?

回答

1

有了下面的代碼片段,你有一個總的想法如何做到這一點:

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

然後你就可以在上面的代碼片段作爲一般的使用功能,如:

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; 
} 

並使用它是這樣的:

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

但是要注意的函數可以返回0,false,這兩種計算結果爲假(使用類似如果($ foundIndex!== FALSE)如果($ foundIndex ===假))。

+0

不錯的功能。想想我會聲明函數爲'函數SearchArray(array $ array,...',並跳過'is_array'檢查雖然=) – Svish 2010-07-08 12:41:03

+0

是的,這是更好的,但這需要PHP 5.1 +的工作。 – AlexV 2010-07-08 13:18:16

+0

我知道沒有其他選擇,但仍愚蠢,你真的需要循環數據。 – danger89 2014-04-20 00:56:09

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'); 
相關問題