我有一系列“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'])
…
我还想反过来做。
我是否有任何内置函数可以覆盖,或者我必须使用两个循环?
(顺便说一句,我没有使用foreach
,因为我想通过引用将$ a传递给函数,这给了我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
,因为它应该可以正常工作。如有必要,请随时更改。
答案 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!";
?>