У меня есть форма с 6 полями для фильтрации списка массивов в PHP.
При отправке формы я хочу, чтобы фильтр был применен к списку и отображал только те записи, которые соответствуют вводу 6 полей.
Я использую filter_array (), но мне нужен код для применения всех фильтров.
Кто-нибудь может мне помочь?
Мне удалось применить первое поле с помощью оператора If, но как только я применяю второе поле, список теперь включает записи, которые не заполняют первый фильтр.
Мой массив выглядит так
$o[] = array ('Sagsnummer' =>31400, 'Prod.ordrenummer' => 0101, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "RALF", 'Montageleder' => "JALU");
$o[] = array ('Sagsnummer' =>31400, 'Prod.ordrenummer' => 0102, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "RALF", 'Montageleder' => "JALU");
$o[] = array ('Sagsnummer' =>31400, 'Prod.ordrenummer' => 0103, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "RALF", 'Montageleder' => "JALU");
$o[] = array ('Sagsnummer' =>35683, 'Prod.ordrenummer' => 0101, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "EHA", 'Montageleder' => "DEKA");
$o[] = array ('Sagsnummer' =>35683, 'Prod.ordrenummer' => 0102, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "EHA", 'Montageleder' => "DEKA");
$o[] = array ('Sagsnummer' =>35683, 'Prod.ordrenummer' => 0103, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "EHA", 'Montageleder' => "DEKA");
$o[] = array ('Sagsnummer' =>36180, 'Prod.ordrenummer' => 0101, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "EHA", 'Montageleder' => "JALU");
$o[] = array ('Sagsnummer' =>36193, 'Prod.ordrenummer' => 0101, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "MKJE", 'Montageleder' => "HJHS");
$o[] = array ('Sagsnummer' =>31400, 'Prod.ordrenummer' => 0104, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "RALF", 'Montageleder' => "JALU");
$o[] = array ('Sagsnummer' =>31400, 'Prod.ordrenummer' => 0105, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "RALF", 'Montageleder' => "JALU");
$o[] = array ('Sagsnummer' =>31400, 'Prod.ordrenummer' => 0106, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "RALF", 'Montageleder' => "JALU");
$o[] = array ('Sagsnummer' =>36193, 'Prod.ordrenummer' => 0102, 'Status' => "Ordre", 'Fase' => "Produktion", 'Projektleder' => "MKJE", 'Montageleder' => "HJHS");
Поля фильтра называются
$fsagsnr;
$forside;
$status;
$fase;
$fprojektleder;
$fmontageleder;
Я вызываю filter_array () с помощью
$new_array = array_filter($o, array(new Filter($fsagsnr, $forside, $status, $fase, $fprojektleder), 'filter'));
И мой класс Filter выглядит следующим образом
class Filter {
private $sagsnr;
private $forside;
private $status;
private $fase;
private $projektleder;
function __construct($sn,$fo,$st,$fa,$pl) {
$this->sagsnr = $sn;
$this->forside = $fo;
$this->status = $st;
$this->fase = $fa;
$this->projektleder = $pl;
}
function filter($i) {
$result = false;
if($this->sagsnr != "" && ($i["Sagsnummer"] == $this->sagsnr)) $result = true;
elseif($this->forside != "" && ($i["Prod.ordrenummer"] == $this->forside)) $result = true;
return $result;
}
}
SOLUTION
Теперь в моей функции фильтра есть только один оператор If.
if(($this->sagsnr == "" || $i["Sagsnummer"] == $this->sagsnr) && ($this->forside == "" || $i["Prod.ordrenummer"] == $this->forside) && ($this->status == "" || $i["Status"] == $this->status) && ($this->fase == "" || $i["Fase"] == $this->fase) && ($this->projektleder == "" || $i["Projektleder"] == $this->projektleder) && ($this->montageleder == "" || $i["Montageleder"] == $this->montageleder)) $result = true;