我可以用一个循环来完成吗?

时间:2011-08-02 07:34:21

标签: php

我有一系列“striuctures”,让我们说每个看起来像

$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;  

我还想反过来做。

我是否有任何内置函数可以覆盖,或者我必须使用两个循环?

(顺便说一句,我没有使用foreach,因为我想通过引用将$ a传递给函数,这给了我foreach的问题,但没有for循环 - 由于某种原因我无法理解)

3 个答案:

答案 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,因为它应该可以正常工作。如有必要,请随时更改。

答案 1 :(得分:1)

您可以使用类似于此的查询在MySQL中检查:

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

答案 2 :(得分: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!";

?>