2012-09-05 119 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

你的權利,我會相應地編輯。 –

相關問題