1

私の目標は、新しい一連の製品レコードを既存の連想配列に追加することですが、各製品が 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; }
    }
}
4

2 に答える 2

2

のようにプロダクト ID をキーとして使用すると、既存のすべてのプロダクトに対してプロダクト ID を簡単に確認$already[$result['products_id']] = $result;できます。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)

于 2012-04-16T01:19:06.197 に答える
1

の配列キーとして商品IDを割り当ててみてはどう$alreadyでしょうか?

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

もちろん、これは古い製品レコードを上書きしますが、重複を適切に回避する必要があります!

于 2012-04-16T01:19:39.117 に答える