delboy1978uk / collection-filter
使用这个可扩展的过滤器类过滤你的数组集合
v1.0.1
2017-10-27 13:31 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- codeception/codeception: dev-master
This package is auto-updated.
Last update: 2024-09-04 21:46:07 UTC
README
这是一种简单且可扩展的筛选完整结果集的方法。非常适合分页以及其他筛选。
安装
composer require delboy1978uk/collection-filter
使用
CollectionFilter 类自带一个分页器以过滤结果。下面是创建你自己的过滤器的方法
<?php use Del\Filter\CollectionFilter; $data = [1,2,3,4,5,6,7,8,9]; $filter = new CollectionFilter(); $filter->getPaginationFilter() ->setPage(2) ->setNumPerPage(3); $results = $filter->filterArrayResults($data); // returns array[4,5,6] $totalPages = $filter->getPaginationFilter()->getTotalPages(); // returns 3
你也可以使用实现了 ArrayIterator 的任何类
<?php $results = $filter->filterResults($arrayIteratorClass);
创建你自己的过滤器
创建你自己的过滤器非常简单。只需实现 Del\Filter\Filter\FilterInterface
。在 tests/unit
中有两个测试过滤器。以下是构建一个过滤器的方法
<?php // firstly, use these use ArrayIterator; use Del\Filter\Filter\FilterInterface; // next, make your class implement FilterInterface class NumberSixFilter implements FilterInterface { /** * Then create this method * * @param ArrayIterator $collection * @return ArrayIterator */ public function filter(ArrayIterator $collection) : ArrayIterator { // We need to pass back results $results = new ArrayIterator(); // loop through the collection passed in while ($collection->valid()) { // Get the current row $current = $collection->current(); // This is my actual example filter. // If the current row is an integer that ISN'T 6, add it! // And if it isn't an integer add it regardless if (is_integer($current) && $current != 6) { $results->append($current); } elseif (!is_integer($current)) { $results->append($current); } // Move on to the next item $collection->next(); } // Finally, return the results return $results; } }
然后添加你的新过滤器
<?php use Del\Filter\CollectionFilter; use Your\CustomFilter; $filter = new CollectionFilter(); $customFilter = new CustomFilter(); $filter->getFilterCollection()->append($customFilter);
贡献
请随意在 Github 上添加问题,或者选择一个问题并发送拉取请求!所有贡献都受欢迎!