2012-09-05 77 views

回答

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

如果你需要通过不同的按键来查找对象,这样你就可以通过一个特定的键没有真正对其进行索引,你需要寻找到不同的搜索策略一样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

你的权利,我会相应地编辑。 –

相关问题