我可以用一个循环来做到这一点吗?
我有“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'])
…
我也想做相反的事情。
是否有任何内置的函数,我是overloooking,或者我必须去两个循环?
(顺便说一句,我没有使用foreach
因为我想通过引用传递$一个成一个功能,这给了我foreach
问题,但不是一个for循环 - 由于某种原因,我无法捉摸)
试试这个:
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
,因为它应该在我这里的方式正常工作。如有必要,请随时更换。
据我所知,它正在陷入第二个循环。我在想更多可读的代码。谢谢 – Mawg
我只是一种不同的方法。如果您只需要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'] . '";');
这将要求他为每个单个元素进行单个查询,这不是非常有效。 –
试试这个:
<?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!";
?>
我不太明白你的问题,你要彼此比较2个阵列? –