周长/数组变换器

dev-develop 2015-04-01 22:06 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:14:54 UTC


README

一个简单的类,可以以多种方式转换PHP数组

Build Status

安装

像其他人一样使用 composer

$ composer require perimeter/array-transformer:dev-develop

用法

使用您的数据创建一个数组变换器

$data = [ 'one' => 'foo', 'two' => [ 'bar', 'baz' ] ];
$transformer = new Perimeter\ArrayTransformer\ArrayTransformer($data);

现在,您可以尽情享受乐趣!

重命名

// $data = [ 'A' => 'foo' ]
$transformer->rename('A', 'RENAMED');
// [ 'RENAMED' => 'foo' ]

// $data = [ 'A' => [ 'bar', 'baz' ] ]
$transformer->rename('A/0', 'RENAMED');
// [ 'A' => [ 1 => 'baz' ], 'RENAMED' => 'bar' ]

// $data = [ 'A' => [[ 'B' => 1 ], [ 'B' => 2 ]] ]
$transformer->rename('A/?/B', 'A/?/C');
// [ 'A' => [[ 'C' => 1 ], [ 'C' => '2' ]] ]

删除

// $data = [ 'A' => 'foo', 'B' => 'bar' ]
$transformer->remove('A');
//  [ 'B' => 'bar' ]

// $data = [ 'A' => [ 'bar', 'baz' ] ]
$transformer->remove('A/?:equals("bar")');
// [ 'A' => [ 'baz' ] ]

// $data = [ 'A' => [ 'B' => 1 ], 'C' => '2' ]
$transformer->remove('A:has(B=2)');
// [ 'C' => '2' ]

替换

// $data = [ 'A' => 1 ]
$transformer->replace('A', [1=>2]);
//  [ 'A' => 2 ]

// $data = [ 'A' => 'abca' ]
$transformer->replace('A', ['a'=>'xxx']);
// [ 'A' => [ 'xxxbcxxx' ] ]

翻译

// $data = [ [ 'A' => 1 ], [ 'A' => 2 ], [ 'A' => 3 ] ]
$transformer->translate('A/?', [
  1 => 'one',
  2 => 'two',
  3 = >'three'
]);
//  [ [ 'A' => 'one' ], [ 'A' => 'two' ], [ 'A' => 'three' ] ]

重新排序

// $data = [ 'A' => true, 'B' => false ]
$transformer->reorder('A', 'after', 'B');
//  [ 'B' => false, 'A' => true ]

// $data = [ 'A' => true, 'B' => false ]
$transformer->reorder('B', 'before', 'A');
//  [ 'B' => false, 'A' => true ]

// $data = [ 'A' => true, 'B' => false, 'C' => true ]
$transformer->reorder('C', 'first');
//  [ 'C' => true, 'A' => true, 'B' => false ]

// $data = [ 'A' => true, 'B' => false, 'C' => true ]
$transformer->reorder('A', 'last');
//  [ 'B' => false, 'C' => true, 'A' => true ]

修改

// $data = [ 'A' => 'tEst', 'B' => 'UPPERCASE' ]
$transformer->modify('B', 'strtolower');
//  [ 'A' => 'tEst', 'B' => 'uppercase' ]

// $data = [ 'A' => 'boat', 'B' => [ 'car', 'track' ] ]
$transformer->modify('B', function ($var) { return 'race'.$var; });
//  [ 'A' => 'boat', 'B' => [ 'racecar', 'racetrack' ] ]

语法

该类使用“路径”的概念来索引多维数组。通配符 ? 用于遍历整个子数组。

示例

A       -->   $array['A']
A/B     -->   $array['A']['B']
A/?/B   -->   foreach($array['A'] as $k => $v) $array['A'][$k]['B']