2011-08-02 90 views
1

我有「striuctures」的陣列,假設每個lookss像我可以用一個循環來做到這一點嗎?

$a['field_1'] = 'value 1'; 
$b['field_1'] = 'value 2'; 
$c['field_1'] = 'value 3'; 

,我將其存儲在MySQL數據庫。

後來的後來,我想使對數組$ B,它具有相同的密鑰的作儀,我想問

for each $a 
    is there a $a['field_1'] where 'value X' == the value of $b['field_1'] ? 

我能避免

for ($i = 0; $i < count($a); $i++)  
    for ($j = 0; $j < count($b); $j++)  
    if ($a[$i]['field_1'] == $b[$j]['field_1']) 
     &hellip; 

我也想做相反的事情。

是否有任何內置的函數,我是overloooking,或者我必須去兩個循環?

(順便說一句,我沒有使用foreach因爲我想通過引用傳遞$一個成一個功能,這給了我foreach問題,但不是一個for循環 - 由於某種原因,我無法捉摸)

+0

我不太明白你的問題,你要彼此比較2個陣列? –

回答

2

試試這個:

foreach($a as $i => $val) { 
    if(in_array($val, $b)) { 
     doSomething($a, $i); 
    } 
} 

如果您需要ŧ他在B的位置,使用這個:

foreach($a as $i => $val) { 
    $j = array_search($val, $b) 
    if($j !== FALSE) { // note operator MUST be !== 
     doSomething($a, $i, $b, $j); 
    } 
} 

我應該警告你,它只是隱藏第二個循環,但它可能會優化這種方式。

此外,我用foreach,因爲它應該在我這裏的方式正常工作。如有必要,請隨時更換。

+0

據我所知,它正在陷入第二個循環。我在想更多可讀的代碼。謝謝 – Mawg

+1

我只是一種不同的方法。如果您只需要borg數組中的值列表,請嘗試使用array_intersect:http://php.net/manual/en/function.array-intersect.php – OverZealous

1

你可以使用一個類似的查詢檢查在MySQL:

mysql_query('SELECT id FROM table WHERE field_1="' . $b['field_1'] . '";'); 
+0

這將要求他爲每個單個元素進行單個查詢,這不是非常有效。 –

1

試試這個:

<?php 

    $array1 = array("value1", "value2", "value3"); 
    $array2 = array("value1", "value2", "value3"); 

    if (empty(array_diff($array1,$array2))) { 
     echo "Arrays are equal!"; 
    } 
    else echo "Arrays are NOT equal!"; 

?> 
相關問題