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