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

如果您需要通过不同的键来查找对象,因此您不能真正通过一个特定的键来索引它们,您需要研究不同的搜索策略,例如二分搜索

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

或者你甚至可以在一行中做到这一点:

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

您可能希望结合使用两个函数来获得所需的结果。

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

array_search — 在数组中搜索给定的值,如果成功则返回相应的键

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

你可以做:

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