我可以用一个循环来做到这一点吗?

问题描述:

我有“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个阵列? –

试试这个:

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

你可以使用一个类似的查询检查在MySQL:

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

这将要求他为每个单个元素进行单个查询,这不是非常有效。 –

试试这个:

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

?>