0

Web アプリで、ユーザーが csv ファイルをアップロードし、データベースに入れる途中でそれをチェックする必要があります。情報の一部は単純な階層データセットを形成するため、行が一意であることを確認したいと考えています。例を挙げて、私がやろうと思っていたことを次に示します。

CSV にはこれらの行が含まれています...

field5      field6      field7
fred        bert        apple
fred        bert        apple
fred        george
fred        george      pear
will        tom         orange
will        tom         plum

このような PHP 配列にそれらを吸収するつもりでした。

$unique_fields = array();
while( $row = fgetcsv($handle) ){
    if( $row[5] ){
        if( !array_key_exists( $row[5] , $unique_fields ) ){
            $unique_fields[ $row[5] ] = array();
        }
        if( $row[6] ){
            if( !array_key_exists( $row[6] , $unique_fields[ $row[5] ] )){
                $unique_fields[ $row[5] ][ $row[6] ] = array();
            }

            if( $row[7] ){
                if( !array_key_exists( $row[7], $unique_fields[ $row[5] ][ $row[6] ]  )){
                    $unique_fields[ $row[5] ][ $row[6] ][ $row[7] ] = array();
                }
            }
        }
    }
}

これが良いアイデアである場合 (そして私は提案を受け入れます) - その後の最善の方法は何ですか? 上記のcsvの例のように見えるように、配列をデータベースに転送したいが、重複はありません。

4

1 に答える 1

0

わかりました、誰もそれを突き刺したくありませんでしたので、私は辛抱強く考えました。誰かがより良い解決策を持っている場合に備えて、ページを監視します。ご覧いただきありがとうございます。

if( count($unique_fields) ){
    foreach( $unique_fields as $k1=>$v1 ){
        if( is_array($v1) ){
            foreach( $v1 as $k2=>$v2 ){
                if( is_array($v2) ){
                    foreach( $v2 as $k3=>$v3 ){
                        //insert $k1, $k2, $k3
                    }
                }else{
                    //insert $k1, $k2
                }
            }
        }else{
            //insert $k1 on its own
        }
    }
}
于 2012-10-30T11:24:57.197 に答える