1

私は PHPArray を持っています:

$fullData = array ( 
        array ( 'id' => 23123, 'name'=>'a', number =>...),
            array()....
);

この完全なデータセットがユーザーに表示されます。ただし、彼がフォーム ページから来た場合は、データを POST してこの配列を変更します。

ユーザーフィールドに関して、配列フィールドを検索する必要があります。したがって、POST データが入力されていない場合は、値をデフォルトですべてに設定します。

if( $resetData == 1) {
    foreach ($params as $i=>$k) {
        if($k!='all') {
            $fields[][$i] = $k;
        }
    }...

したがって、ユーザーが入力したデータをfields配列に取得します。次に、ユーザーが入力したデータを SQL AND 形式で検索する方法を教えてください。例: name == 'aaditi' AND profile == 'student', 学生プロファイルを持つ名前 aaditi を持つすべてのデータを一覧表示します

や などのさまざまな関数array_searchstrstr、stackoverflow に関する他のいくつかの質問を試しましたが、それらは主に単一のキー値検索に制限されています。

4

1 に答える 1

2

渡されたフィルターに一致するものをすべて見つけるために、データ配列を1行ずつ検索します。フィールド配列をkey=>valueとします。ここで、keyは列名であり、valueは必要な値です。

$outputArray = array();
foreach($fullData as $row) {
    $addToOutput = true;
    foreach ($fields as $field) {
        foreach($field as $key => $value) {
            if (!isset($row[$key]) || $row[$key] != $value) {
                $addToOutput = false;
            }
        }
    }
    if ($addToOutput == true) {
        $outputArray[] = $row;
    }
}

これは最も効率的な解決策ではなく、より良い解決策が見つかると確信していますが、少なくとも、膨大なデータセット(1つあたり10列で> 100,000行)では問題なく機能するはずです。パラメータなしでこれと同じアルゴリズムを実行することもでき、すべてのデータが出力されるはずです。

于 2012-06-01T02:13:57.850 に答える