5

複数のオブジェクトを保持する配列があります。ループせずに、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

6 に答える 6

6

いいえ。値をすばやく直接検索する必要がある場合は、配列キーを使用する必要があります。配列キーを使用すると、検索が非常に高速になります。例えば:

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

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

さまざまなキーでオブジェクトを検索する必要があるため、特定の1つのキーでオブジェクトを実際にインデックスに登録できない場合は、バイナリ検索などのさまざまな検索戦略を調べる必要があります。

于 2012-09-05T10:02:41.997 に答える
4
$results = array_filter($array, function($item){
   return ($item->id === 27);
});
if ($results)
{
   ..  You have matches
}
于 2012-09-05T10:05:39.937 に答える
2

何らかの方法でループを実行する必要がありますが、ループを自分で手動で実装する必要はありません。array_filter関数を見てください。あなたがする必要があるのは、次のようなオブジェクトをチェックする関数を提供することです。

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

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

または、これを1行で行うこともできます。

if(count(array_filter($input_array, function($var) { return $var->id == 27; })) {
    // you have at least one matching element
}
于 2012-09-05T10:04:10.603 に答える
2

2つの関数を組み合わせて、目的の結果を得ることができます。

array_search($needle、array_column($ array、'key_field');

その使用法を示すために小さなコードを作成しました。

<?php
$superheroes    =    [
    [
        "id"    =>    1,
        "name"  =>    "spiderman"
    ],
    [
        "id"    =>    2,
        "name"  =>    "superman"
    ],
    [
        "id"    =>    3,
        "name"  =>    "batman"
    ],
    [
        "id"    =>    4,
        "name"  =>    "robin"
    ],
];
$needle    =    'spiderman';
$index     =    array_search($needle, array_column($superheroes, "name"));
echo "Is $needle a superhero?<br/>";


//Comparing it like this is important because if the element is found at index 0, 
//array_search will return 0 which means false. Hence compare it with !== operator
if ( false !== $index ) {
    echo "yes";
} else {
    echo "no";
}
?>
于 2018-11-29T17:44:37.923 に答える
0

できるよ:

foreach ($array as $value)
{
   if ($value == "what you are looking for")
       break;
}
于 2012-09-05T10:00:54.473 に答える
0

array_search —指定された値の配列を検索し、成功した場合は対応するキーを返します

$key = array_search('your search', $array);
于 2012-09-05T10:02:17.750 に答える