mufuphlex/array-util

数组工具 - 智能且快速数组助手

1.0.0 2023-03-25 14:12 UTC

This package is not auto-updated.

Last update: 2024-09-22 00:51:10 UTC


README

Latest Stable Version License

数组工具 - 智能且快速数组助手。

这些助手,以及其他功能,提供了内置PHP数组函数的显著改进版本(大约快10-30倍),如 unique()intersect()

unique() 函数

这是标准 array_unique() PHP 函数的改进版本(快30倍!)。

$arr = [1,2,3,1,2,3];
$unique = \Mufuphlex\Util\ArrayUtil::unique($arr);
// [1,2,3]

intersect() 函数

这是标准 array_intersect() PHP 函数的改进版本(快10倍!)。

$a = [1,2,3];
$b = [2,3,4];
$c = [3,4,5];
$result = \Mufuphlex\Util\ArrayUtil::intersect($a, $b, $c);
// [3]

cutBy*() 函数

如果您需要根据元素的键从数组中移除特定元素,cutByWhitelist(array $array, array $map)cutByBlacklist(array $array, array $map) 可以非常有用。 cutByWhitelist() 只保留在 $map 中列出的 $array 中的元素,而 cutByBlacklist() 则相反 - 从 $array 中移除在 $map 中列出的元素。此外,这些函数不仅可以移除,还可以通过回调函数修改 $array 的成员 - 类似于标准 PHP 函数 array_walk() 的扩展版本。

如何使用它?

让我们考虑以下示例数组

$array = [
	'result' => [
		'one' => [
			'param 1' => 1,
			'param 2' => 2,
			'param 3' => 3,
		],
		'another' => [
			'param 1' => 4,
			'param 2' => 5,
			'param 3' => 6,
		],
		'another one' => [
			'param 1' => 7,
			'param 2' => 8,
			'param 3' => 9,
		]
	],
	'errors' => [
		'form' => [
			'field 1' => [
				0 => 'error 1',
				1 => 'error 2'
			],
			'field 2' => [
				0 => 'error 3',
				1 => 'error 4 '
			]
		],
		'logic' => [
			0 => 'logic error 1',
			1 => 'logic error 2'
		]
	],
	0 => [
		0 => 'item 1',
		1 => 'item 2'
	],
	1 => [
		0 => 'item 3',
		1 => 'item 4'
	],
	'123 - numeric containing' => [
		0 => 'item 5',
		1 => 'item 6'
	],
	'not numeric containing' => [
		0 => 'item 5',
		1 => 'item 6'
	],

];
  1. 保留/移除 `array.result*` 中键只包含 `one` 或只包含 `another` 的元素
    $map = [
    	'result' => [
    		'/^(?:one|another)$/' => true
    	]
    ];
    
  2. 只保留/移除 `array.errors.logic` 中的元素
    $map = [
    	'errors' => [
    		'logic' => true
    	]
    ];
    
  3. 只保留/移除 `array.errors.form.field *.*` 中键为 `0` 的元素
    $map = [
    	'errors' => [
    		'form' => [
    			'field \d+' => [
    				0 => true
    			]
    		]
    	]
    ];
    
  4. 保留/移除 `array.result.*` 中键为 `param 3` 的元素,并可以通过添加 5 来修改这些元素的价值
    $map = [
    	'result' => [
    		'/.+/' => [
    			'param 3' => function($arg){ return $arg+=5; }
    		]
    	]
    ];