Проблема производительности с текущим фильтрующим кодом для данных - PullRequest
0 голосов
/ 18 октября 2019

Я фильтрую внешнюю функцию на datatable, у меня работает код, но я чувствую, что он медленный и его можно улучшить. Мне нужно фильтровать по нескольким факторам:

  1. Простое значение поля для таргетинга на столбец в базе данных (отсутствует в представлении с датами)

  2. Множественный выбор из раскрывающегося списка для целевого столбца в базе данных (отсутствует в представлении с датами)

  3. Множественный выбор из раскрывающегося списка для целевого столбца в базе данных, который также является массивомЗдесь я должен сравнить, что это подмножество целевого массива (отсутствует в представлении с датами)

Вот код PHP:

function customfilter( $data, $field, $filter) {

//IF ARRAY
if ( is_array( $filter ) ) {

$arrayNew = array();

foreach($data as $key => $element){

if ( is_array( $element[$field]["array"]) ) {
if (array_diff($element[$field]["array"], $filter)){
$arrayNew[$key] = $data[$key];  
}
}else{      
if (in_array($element[$field]["sort"], $filter)){
$arrayNew[$key] = $data[$key];
}
}

}

$data = $arrayNew;

//IF VALUE  
}else{

$arrayNew = array();

foreach($data as $key => $element){ 
if (strpos($element[$field]["sort"],$filter) !== false) {
$arrayNew[$key] = $data[$key];
}
}

$data = $arrayNew;

}

return $data;

}

Здесьэто Jquery:

var customfilter = function() {


        var frm_data    = $('#searchFrom').serializeArray();        
        var subData     = {};               
        //POST VALUES ARE SENT USING SAME GET FILE NO NEED TO POST AGAIN
        var multiple    = {};

        var i = 0;
        $.each(frm_data, function(key, val) {       

        var str = val.name; 

        //CHECK IF FIELD NAME FINISHES WITH MULTIPLE
        if (str.match("_multiple")){

        //RESET 
        if (typeof multiple[str] == "undefined") {
        multiple[str] = new Array();
        i = 0;
        }

        //EMPTY ARRAY IF NO SELECTION
        if(val.value === ''){
        multiple[str] = [];
        }

        multiple[str][i] = val.value;        
        i++; 

        subData[val.name] = multiple[str];

        }else{

        subData[val.name]   = val.value;

        }

        });

        myData = subData;

        table.table().draw();


        }

Где у меня есть цикл, я думаю, это проблема. Я нашел это, но я не уверен, как подать заявку ... Надеюсь, кто-нибудь может помочь.

$data = array_filter( $data, function ( $a ) use ( $field, $filter ) {
                    return (boolean) preg_match( "/$filter/i", $a[ $field ] );
                } );
...