2012-04-16 11 views
1

私の目標は、新しい製品レコードセットを既存の連想配列に追加することですが、各製品が一度だけ表示されるようにします。私は以下の関数を書いた。これは単純なもののためにあまりにも多くのコードのように見えます。私が学ぶ必要があるPHP配列関数はありますか?連想配列に追加 - 重複はありません

function _append (&$already, $addition) { 
    while($result = mysql_fetch_array($addition)) { 
     $already_found = FALSE; 
     foreach ($already as $try) { 
      if ($try["products_id"] == $result["products_id"]) { 
       $already_found = TRUE; 
       break; 
      } 
     } 
     if (!$already_found) { $already[] = $result; } 
    } 
} 

答えて

2

$already[$result['products_id']] = $result;のように、キーとしてプロダクトIDを使用して、あなたはすべての既存の製品に対して簡単プロダクトIDを確認するためにarray_key_existsを使用することができます。 (どちらにしても、IDごとに1つの製品しか持っていないので、チェックしないと、最新の複製が古いものを上書きします)

いずれにしても、foreachを一掃します。

function _append(&$already, $addition) { 
    while ($result = mysql_fetch_array($addition)) { 
     if (!array_key_exists($result['products_id'], $already)) { 
      $already[$result['products_id']] = $result; 
     } 
    } 
} 

キャッチは、あなたの配列はもはや数値的に索引付けされていないということです。アイテムを追加する場合は、そのキー(products_idの値)を追加します。しかし、いつものようにforeach ($items as $item)と言うことができます。

+0

私は連想配列を使用しているので、$ item ['product_id']はキーではありません。私はあなたの答えを適用する方法がわかりません。 – Smandoli

+0

あなたは各項目に連想配列を使っていますが、 '$ already'は明らかに数値的に索引付けされています。そして私が理解するように、 'products_id'フィールド*はキーです。 "重複"のあなたの全体的な定義は、2つの一致することです。アイテムのproducts_idをキーとして使用するように変更する場合は...レムメ編集。 – cHao

+0

編集していただきありがとうございます。私は助けが必要でした。 :-p – Smandoli

1

$alreadyに配列IDとしてプロダクトIDを割り当てるのはどうですか?

while($result = mysql_fetch_array($addition)) { 
    $already[$result['products_id']] = $result; 
} 

これはもちろん、古い製品レコードを上書きしますが、重複してはいけません!

+0

多次元配列に変更します。私はそれを行うことができますが、私の現在の解決策は機能し、連想配列は非常に便利です。 – Smandoli

+0

あなたがしているのは、PHP定義のキーから自分で指定したキーに切り替えるだけです。 @cHaoはそれをうまく説明しています。 – rjz

+0

お返事ありがとうございます。私は余分な説明が必要でした!また、既存のレコードを上書きしないようにする機能も必要でした。 – Smandoli