2011-08-02 11 views
1

私は「striuctures」の配列を持っている、のはこれを1回のループで行うことはできますか?

$a['field_1'] = 'value 1'; 
$b['field_1'] = 'value 2'; 
$c['field_1'] = 'value 3'; 

などの各lookssを言わせて、私は、MySQLデータベースに格納します。

はその後、私は同じキーを持っていると私は

for each $a 
    is there a $a['field_1'] where 'value X' == the value of $b['field_1'] ? 

をお願いしたいと思います配列$ Bに対するcomparissionを作りたい私は、私も希望

for ($i = 0; $i < count($a); $i++)  
    for ($j = 0; $j < count($b); $j++)  
    if ($a[$i]['field_1'] == $b[$j]['field_1']) 
     &hellip; 

を避けることができます逆にそれをする。

私はオーバールックになっている組み込み関数がありますか?または2つのループを使用する必要がありますか?

(私は関数に参照によって$ aを渡したいのでところで、私はforeachを使用していないとそれはなく、forループでくれforeachに問題を与えた - 私は尋することはできません何らかの理由で)

+0

私は非常にあなたの質問を理解していなかった、あなたはお互いに2つの配列を比較したいですか? –

答えて

2

はこれを試してみてください私はそれだけで第二のループを隠していますが、それはこの方法を最適化することができるあなたを警告する必要があります

foreach($a as $i => $val) { 
    $j = array_search($val, $b) 
    if($j !== FALSE) { // note operator MUST be !== 
     doSomething($a, $i, $b, $j); 
    } 
} 

:彼はB内の位置も、これを使用しています。

また、私はforeachを使用しました。なぜなら、私がここにあるようにうまく動作するはずです。必要に応じて自由に変更してください。

+0

私はそれが第1回目のループを打ち消していることを理解します。私は読みやすいコードをもっと考えていました。ありがとう – Mawg

+1

私はちょっと別の方法です。 borg配列にある値のリストが必要な場合は、array_intersectを試してみてください:http://php.net/manual/en/function.array-intersect.php – OverZealous

1

あなたは、MySQLには次のようなクエリを使用していることを確認することができます:あなたがトンが必要な場合は

foreach($a as $i => $val) { 
    if(in_array($val, $b)) { 
     doSomething($a, $i); 
    } 
} 

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

これは彼に非常に効果的ではないすべての単一の要素のための単一のクエリを作成することを必要とするでしょう。 –

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

?>