2012-02-25 1 views
8

配列の検索を行い、一致が見つかったらすべての値を返すのが好きです。配列内のキー[name]は私が検索しているものです。配列を検索し、一致するものが見つかるとすべてのキーと値を返します

Array (
[0] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[1] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 

私はそれが戻ってくるジョン・ドウの検索を行った場合。

Array 
(
    [id] => 20120101 
    [link] => www.johndoe.com 
    [name] => John Doe 
) 

私が探しているものに基づいて名前を変更する方が簡単でしょうか。上記の配列の代わりに、以下のものを生成することもできます。

Array (
[Jane Doe] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[John Doe] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 
+0

を探してされていない場合は、名前を使用する場合には、重複キーを持つことのチャンスを実行しますあなたの鍵のために。 – BenOfTheNorth

+0

2番目のアイデアを無視し、最初の配列だけを検索します。 – Tim

答えて

6
$filteredArray = 
array_filter($array, function($element) use($searchFor){ 
    return isset($element['name']) && $element['name'] == $searchFor; 
}); 

私は(優れた)scibuffの答えに、オプションの変更を提供したいと思いますPHPの5.3.x

+0

ショートと速く、実装が簡単でした。まさに私が探していたもの。本当にありがとう! – Tim

1
function search_array($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if ($item['name'] == $name){ // or other string comparison 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 
+0

既に組み込み関数 'array_search'、http://docs.php.net/array_search->'致命的なエラー:array_search()を再宣言できません ' – VolkerK

+1

私の悪い、ちょうどそれを別の名前... – scibuff

1

が必要です。あなたが完全に一致するが、配列内の文字列...

function array_search_x($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if (strpos($item['name'], $name) !== false) { // changed this line 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 

とのコールにこれを...

$pc_ct = array_search_x($your_array_name, 'your_string_here'); 
関連する問題