2012-09-05 14 views
5

I複数のオブジェクトを保持する配列があります。値がオブジェクトのいずれか1つに存在するかどうかを確認することは可能ですか? id-> 27 ループなし? PHPのin_array()関数と同様の方法で呼び出されます。ありがとう。ループのないオブジェクトでいっぱいの配列内に値が存在するかどうかを確認できますか?

あなたが行うことができます
> array(10)[0]=>Object #673 
        ["id"]=>25 
        ["name"]=>spiderman 
      [1]=>Object #674 
        ["id"]=>26 
        ["name"]=>superman 
      [2]=>Object #675 
        ["id"]=>27 
        ["name"]=>superman 
      ....... 
      ....... 
      ......... 

答えて

4

かの番号を指定した値を配列で検索し、 対応するキーを返します頻繁に値の迅速なダイレクトルックアップが必要な場合は、配列キーを使用してt裾、これは検索するための高速雷です。たとえば:

// prepare once 
$indexed = array(); 
foreach ($array as $object) { 
    $indexed[$object->id] = $object; 
} 

// lookup often 
if (isset($indexed[42])) { 
    // object with id 42 exists... 
} 

あなたが別のキーでオブジェクトを検索する必要がある場合、あなたは1つの特定のキーによってインデックス、それらを実際にすることはできません、あなたはbinary searchesのようなさまざまな検索戦略を検討する必要があります。

0

foreach ($array as $value) 
{ 
    if ($value == "what you are looking for") 
     break; 
} 
+0

?あなたがする必要があるのは、このような何かをするオブジェクトをチェックする機能を提供することですか – Stu

+0

あなたは配列全体をループせずに言った – gorgi93

+1

ハハ真実。私は適切に変更されます。 – Stu

1

array_search - あなたの場合は成功

$key = array_search('your search', $array); 
+1

これは良い機能ですが、値自体ではなく、配列の値のフィールドをチェックする必要があるため、OPでは機能しません。また、 'array_search'は比較関数を受け入れません。 –

2

一方的にループする必要がありますが、手動でループを手動で実装する必要はありません。 array_filter functionをご覧ください。

function checkID($var) 
{ 
    return $var->id == 27; 
} 

if(count(array_filter($input_array, "checkID")) { 
    // you have at least one matching element 
} 

それとも、一つでもラインでこれを行うことができます:ループなしで

if(count(array_filter($input_array, function($var) { return $var->id == 27; })) { 
    // you have at least one matching element 
} 
+0

これは潜在的に非常に無駄です値が見つかると中断されませんが、常にそれらのすべてを反復します。 – deceze

+0

@deceze同意します。問題は彼の配列がどれだけ大きいかということです。彼が数百万のアイテムを扱っている場合、これはうまくいかないでしょう。配列に少数のアイテム(数百にすぎない)が含まれている場合、その影響はごくわずかです。 –

+0

'empty'は関数の戻り値には作用せず、とにかくここで使用する必要はありません。純粋なブール比較はちょうど良いです。 – deceze

3
$results = array_filter($array, function($item){ 
    return ($item->id === 27); 
}); 
if ($results) 
{ 
    .. You have matches 
} 
+0

'$ var'を意味するだけでは'!empty($ var) 'を使わないでください。 – deceze

+0

あなたの権利、それに応じて編集します。 –

関連する問題