是否可以在没有循环的情况下检查一个满是对象的数组中是否存在值?

时间:2012-09-05 09:57:28

标签: php arrays oop

我有一个包含多个对象的数组。是否可以检查任何一个对象中是否存在值,例如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 
           ....... 
           .......
           .........

6 个答案:

答案 0 :(得分:4)

没有。如果您经常需要快速直接查找值,则需要使用数组键,这些数据键快速查找。例如:

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

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

如果您需要通过不同的密钥查找对象,因此无法通过一个特定的密钥对它们进行索引,则需要查看不同的搜索策略,例如binary searches

答案 1 :(得分:3)

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

答案 2 :(得分: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
}

答案 3 :(得分:1)

  

array_search - 在数组中搜索给定值并返回   相应的密钥如果成功

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

答案 4 :(得分:0)

你可以这样做:

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

答案 5 :(得分:0)

您可能需要组合两个功能以获得所需的结果。

  

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";
}
?>