2011-09-17 14 views
0

配列にkey =>値があるかどうかを調べるにはどうすればよいですか?キー=>配列のペアを検索するphp関数はありますか?

たとえば、次の配列にあります。[uid] => 10が存在するかどうかを知りたいです。

 

Array ( 
    [0] => Array (
     [name] => a 
     [uid] => 1 
    ) 
    [1] => Array (
     [name] => b 
     [uid] => 2 
    ) 
) 
+1

いいえ組み込み関数はありません。あなたは自分で書く必要があります。 –

+1

ここをクリックhttp:// stackoverflow。com/questions/4128323/in-array-and-multidimensional-array – Gowri

+0

@Felix Kling: 'in_array'はどうですか? – hakre

答えて

2

in_arrayarray_search仕事::

$result = array_intersect($your_array, $array_to_search); 

は、結果要素をカウント

$a = array(

    array('id' => 10), 
    array('id' => 11), 
    array('id' => 12), 
    array('id' => 13), 
    array('id' => 14), 

); 

var_dump(in_array(array('id' => 14), $a)); // true 
var_dump(in_array(array('id' => 99), $a)); // false 

var_dump(array_search(array('id' => 14), $a)); // 4 
var_dump(array_search(array('id' => 99), $a)); // false 
+0

他に誰も気付かなかったのは私の最初のアイデアだと思います。簡単にするため+1。 – hakre

+0

最初の投稿でコードを編集しました。それはどうですか? –

+0

@ Nick.h:私は[回答を追加](http://stackoverflow.com/questions/7453483/is-there-a-php-function-to-search-a-key-array-pair/7453880#7453880) )複数の値を持つ新しい質問を反映する(これは私の目にも複数の値を検索する意味があります)。 – hakre

2
$foundAt = null; 
foreach($yourArray as $index => $pair){ 
    if($pair['uid']===10){ 
     $foundAt = $index; 
     break; 
    } 
} 
echo $foundAt; 

$foundAtそれが見つかった場合は、何も見つからなかった場合nullこと、および整数ます。

具体的な組み込み関数はありません。ここではarray_walkが便利だと思っていました。

1
foreach($array as $index => $data){ 
    if ($data['uid'] === 10){ 
     echo $index; 
     break; 
    } 
} 
0

には組み込み関数がありませんが、あなたはこのようなものを使用することができます。

は、お好みのキーと値を持つ配列を作成します。

if (count(array_intersect($your_array, array("uid" => 10))) > 0) 
    // pair exists 

は、上記の文を破壊:

$array_to_search = array("uid" => 10); 

array_intersect()は、配列の共通項を取得する:ネストされた配列を持つだけで罰金

if (count($result) > 0) 
    // pair exists 
1

あなたの質問を編集したとし、テストする各要素の中にさらに多くの値がありますが、array_intersect_assocが気になりました。各要素があなたが探しているキーを含んでいてはならない場合を処理します。

基本的には、要素と針の交点が針の場合、要素が一致します。

この比較は、各要素ごとに適用する必要があります。 foreachとなります。見つからない場合は、関数に包まれている機能は、キーとFALSEを返すことができます。

function array_search_array(array $haystack, array $needle) 
{ 
    foreach($haystack as $key => $element) 
    { 
     if ($needle == array_intersect_assoc($element, $needle)) 
      return $key; 
    } 
    return FALSE; 
} 

機能の命名は、私は認めなければならない最適ではありません。 Demo

$needleの順序にかかわらず、複数の値を検索する必要がある場合にも同様に機能します。

単一のキーと値のペアを検索するだけであれば、そのキーにアクセスする前にキーを確認する必要があります。これは、answer by Tomのコード例の変更です。

$foundAt = null; 
foreach($yourArray as $index => $pair) 
{ 
    if(isset($pair['uid']) && $pair['uid'] === 10) 
    { 
     $foundAt = $index; 
     break; 
    } 
} 
echo $foundAt; 
関連する問題