germania-kg/filteriterators

二维遍历器的过滤器

2.2.7 2023-01-03 08:19 UTC

README

Germania KG · FilterIterators

二维遍历器的过滤器。

Packagist PHP version Tests

使用Composer安装

$ composer require germania-kg/filteriterators

或者,直接将此包添加到您的 composer.json:

"require": {
    "germania-kg/filteriterators": "^2.0"
}

BlankSplitFilterIterator

让所有给定字段通过空格分隔后形成的数组中包含某个单词的项目通过。构造函数接受任何可遍历的对象。
可遍历对象可以包含数组或(StdClass)对象。

<?php
use Germania\FilterIterators\BlankSplitFilterIterator;
 
$items = array(
  [ 'foo' => 'bar john doe'],
  [ 'foo' => 'john bar doe'],
  [ 'foo' => 'john doe bar'],
  [ 'foo' => ['john', 'doe', 'bar']],
);  

// Convert above arrays to StdClasses
$objects = array_map(function ($a) { return (object) $a; }, $items);

$filter = new BlankSplitFilterIterator( $items, "foo", "bar" );
echo iterator_count( $filter ); // 4

$filter = new BlankSplitFilterIterator( $objects, "foo", "bar" );
echo iterator_count( $filter ); // 4

WordRegexFilterIterator

让所有给定字段匹配单词的项目通过。构造函数接受任何可遍历的对象。
可遍历对象可以包含数组或(StdClass)对象。

<?php
use Germania\FilterIterators\WordRegexFilterIterator;

$items = array(
  [ 'foo' => 'bar john doe'],
  [ 'foo' => 'john bar doe'],
  [ 'foo' => 'john doe bar'],
  [ 'foo' => 'bar,john,doe'],
  [ 'foo' => 'john,bar,doe'],
  [ 'foo' => 'john,doe,bar'],
  [ 'foo' => 'john,doe,white-bar'],
  [ 'foo' => 'john,doe,bar-black']
);

// Convert above arrays to StdClasses
$objects = array_map(function ($a) { return (object) $a; }, $items);

$filter = new WordRegexFilterIterator( $items, "foo", "bar" );
echo iterator_count( $filter ); // 8

$filter = new WordRegexFilterIterator( $objects, "foo", "bar" );
echo iterator_count( $filter ); // 8

KeyNotFalseFilterIterator

让所有未被明确排除(使用 active=falseactive=0)的项目通过。
构造函数接受任何可遍历的对象。
可遍历对象可以包含数组或(StdClass)对象。

<?php
use Germania\FilterIterators\KeyNotFalseFilterIterator;

// Items may be Arrays or StdClass objects
$data = [
  // These are not "inactive"
  [ 'name' => 'John', 'active' => true ],
  [ 'name' => 'George' ],

  // but these are:
  [ 'name' => 'Paul',  'active' => false ],
  [ 'name' => 'Ringo', 'active' => 0 ],
];

$filter = new KeyNotFalseFilterIterator( $data, "active" );
foreach( $filter as $item ):
	// John
	// George
	echo $item['name'];
endforeach;

NotEmptyFieldFilterIterator

让所有具有非空值字段的项通过。
构造函数接受任何可遍历的对象。
可遍历对象可以包含数组或(StdClass)对象。

<?php
use Germania\FilterIterators\NotEmptyFieldFilterIterator;

// Items may be Arrays or StdClass objects
$data = [
  // These are not "inactive"
  [ 'name' => 'John', 'active' => true ],
  [ 'name' => 'George' ],

  // but these are:
  [ 'name' => 'Paul',  'active' => false ],
  [ 'name' => 'Ringo', 'active' => 0 ],
];

$filter = new NotEmptyFieldFilterIterator( $data, "active" );
foreach( $filter as $item ):
	// John
	echo $item['name'];
endforeach;

问题

请参阅 问题列表。

开发

$ git clone https://github.com/GermaniaKG/FilterIterators.git
$ cd FilterIterators
$ composer install

单元测试

可以将 phpunit.xml.dist 复制到 phpunit.xml 并根据您的需求进行修改,或者保持原样。运行 PhpUnit 测试或composer脚本,如下所示

$ composer test
# or
$ vendor/bin/phpunit