mercredi 10 avril 2019

Build a filter form for a list in PHP

I have a form with 6 fields for filtering an array list in PHP.

On form submit I want the filter to be applied on the list and only show entries that matches the input of the 6 fields.

I use filter_array(), but need some code to apply all filters.

Can anyone help me?

I managed to apply the first field using an If-statement, but as soon as I apply the second field, the list now includes entries that doesn't fullfill the first filter.

My array looks like this

$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");

The filter fields is named

$fsagsnr;
$forside;
$status;
$fase;
$fprojektleder;
$fmontageleder;

I call filter_array() with

$new_array = array_filter($o, array(new Filter($fsagsnr, $forside, $status, $fase, $fprojektleder), 'filter'));

And my Filter class looks like this

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;
  }
}

Aucun commentaire:

Enregistrer un commentaire