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

Php 我可以用一个循环来做这个吗?,php,Php,我有一系列的“stristructures”,假设每个看起来都像 $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'] ? 我

我有一系列的“stristructures”,假设每个看起来都像

$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;  
for($i=0;$i
我也想反过来做

是否有任何内置函数是我在超负荷使用的,或者我必须使用两个循环


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

您可以在MySQL中使用类似于以下内容的查询来检查:

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

您可以在MySQL中使用类似于以下内容的查询进行检查:

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

foreach($a as $i => $val) {
    if(in_array($val, $b)) {
         doSomething($a, $i);
    }
}
<?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!";

?>
如果您也需要B中的位置,请使用:

foreach($a as $i => $val) {
    $j = array_search($val, $b)
    if($j !== FALSE) { // note operator MUST be !==
         doSomething($a, $i, $b, $j);
    }
}
我应该警告你,它只是隐藏了第二个循环,但它可能会以这种方式进行优化

此外,我还使用了foreach的
foreach
,因为它应该像我这里使用的那样工作良好。如有必要,请随时将其更改回原处。

尝试以下操作:

foreach($a as $i => $val) {
    if(in_array($val, $b)) {
         doSomething($a, $i);
    }
}
<?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!";

?>
如果您也需要B中的位置,请使用:

foreach($a as $i => $val) {
    $j = array_search($val, $b)
    if($j !== FALSE) { // note operator MUST be !==
         doSomething($a, $i, $b, $j);
    }
}
我应该警告你,它只是隐藏了第二个循环,但它可能会以这种方式进行优化

此外,我还使用了foreach的
foreach
,因为它应该像我这里使用的那样工作良好。如有必要,请随时将其更改回原处。

尝试以下操作:

foreach($a as $i => $val) {
    if(in_array($val, $b)) {
         doSomething($a, $i);
    }
}
<?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!";

?>

试试这个:

foreach($a as $i => $val) {
    if(in_array($val, $b)) {
         doSomething($a, $i);
    }
}
<?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!";

?>


我不太明白你的问题,你想比较两个数组吗?我不太明白你的问题,你想比较两个数组吗?这需要他对每个元素进行一次查询,这不是很有效。这需要他对每一个元素进行一次查询,这不是很有效。我知道这涉及到第二个循环。我想的更多的是易读的代码。我只是想到了另一种方法。如果您只需要borg数组中的值列表,请尝试使用array_intersect:我知道它涉及第二个循环。我想的更多的是易读的代码。我只是想到了另一种方法。如果您只需要borg数组中的值列表,请尝试使用array_intersect: