data-tools.php

Generic set of data tools
git clone git://git.finwo.net/lib/data-tools.php
Log | Files | Refs | README

commit b6b819722b9296fe827fcfebab780400b31aa7b0
parent 9be32ca3c2282b16ef6cfbb0e4d892fcdb95b374
Author: finwo <finwo@pm.me>
Date:   Wed, 13 Apr 2016 19:36:03 +0200

Implemented equals filter

Diffstat:
Msrc/ArrayQuery.php | 43++++++++++++++++++++++++++++++++++---------
1 file changed, 34 insertions(+), 9 deletions(-)

diff --git a/src/ArrayQuery.php b/src/ArrayQuery.php @@ -39,7 +39,7 @@ class ArrayQuery /** * @var integer */ - protected $limit = -1; + protected $limit = -2; /** * @var array @@ -114,7 +114,6 @@ class ArrayQuery 'type' => 'equals', 'value' => $input, ); - } return $this; @@ -201,11 +200,6 @@ class ArrayQuery //loop through table foreach ($this->table as $row) { - // handle offset - if ( $this->skip-- > 0) { - continue; - } - // handle limit if ( $this->limit-- == 0 ) { break; @@ -228,8 +222,20 @@ class ArrayQuery $outputRow[$colName] = $this->executeSelect($row, $select); } - // add row to output - $output[$outputIndex++] = $outputRow; + // run through filters + if ( $this->executeFilters($outputRow) ) { + + // handle offset + if ( $this->skip-- > 0) { + continue; + } + + // add row to output + $output[$outputIndex++] = $outputRow; + } else { + $this->limit++; + } + } return $output; @@ -250,4 +256,23 @@ class ArrayQuery // Return empty column return null; } + + protected function executeFilters($row) + { + foreach ($this->filters as $filter) { + switch($filter['type']) { + case 'equals': + if ($row[$filter['field']] !== $filter['value']) { + return false; + } + break; + default: + //unknown filter + break; + } + + } + + return true; + } }