mezon / functional
用于函数式编程的小巧快速框架
1.1.0
2021-12-07 06:12 UTC
Requires
- php: >=7.2.0
Requires (Dev)
- infection/infection: ^0.21.5
- phpunit/phpunit: ^8.5
- vimeo/psalm: ^4.2
README
简介
这个类提供了各种成员和工具用于函数式编程。它将帮助你以非常简单的方式处理数组。
模式
在这里,我们可以从数组的所有对象中获取指定的字段
$obj1 = new stdClass(); $obj1->foo = 1; $obj2 = new stdClass(); $obj2->foo = 2; $obj3 = new stdClass(); $obj3->foo = 3; $Data = array( $obj1 , $obj2 , $obj3 ); // will display array( 1 , 2 ,3 ) var_dump( \Mezon\Functional\Fetcher::getFields( $Data , 'foo' ) );
我们还可以设置具有多个值的字段
$Values = array( 1 , 2 , 3 ); $obj1 = new stdClass(); $obj2 = new stdClass(); $Data = array( $obj1 , $obj2 ); Functional::setFieldsInObjects( $Data , 'foo' , $Values ); // will display 3 objects var_dump( $Data );
最后,我们可以对指定的字段求和
$obj1 = new stdClass(); $obj1->foo = 1; $obj2 = new stdClass(); $obj2->foo = 2; $obj3 = new stdClass(); $obj3->foo = 3; $Data = array( $obj1 , $obj2 , $obj3 ); // will display value 6 var_dump( Functional::sumFields( $Data , 'foo' ) );
请注意,您可以递归地遍历嵌套数组
$obj1 = new stdClass(); $obj1->foo = 1; $obj2 = new stdClass(); $obj2->foo = 2; $obj3 = new stdClass(); $obj3->foo = 3; $Data = array( $obj1 , array( $obj2 , $obj3 ) ); // will display value 6 var_dump(Functional::sumFields( $Data , 'foo' ));
此代码也将工作
// will display value 3 var_dump(Functional::sumFields( [ ['foo'=>1], ['foo'=>2] ] , 'foo' ));
转换
我们还可以像这样转换数组中的对象(最基本和简单的方式)
/** * Transformation function multiplies 'foo' field. */ function transform2x( $Object ) { $Object->foo *= 2; return( $Object ); } $obj1 = new stdClass(); $obj1->foo = 1; $obj2 = new stdClass(); $obj2->foo = 2; $obj3 = new stdClass(); $obj3->foo = 3; $Data = array( $obj1 , $obj2 , $obj3 ); Functional::transform( $Data , 'transform2x' ); // will display 3 objects // with 2, 4 and 6 values in their 'foo' fields var_dump( $Data );
但是如果您需要更复杂的转换,可以使用 Transform 类。它将允许您构建全新的数组。
$data = [ 1 , 2 ]; Transform::convert($data,function($item){return [10*$item, 100*$item];}); var_dump($data); // will output // [10=>100 , 20=>200]
如果您只想转换数组的元素,则使用 Transform::convertElements
$data = [ 1 , 2 ]; Transform::convertElements($data,function($item){return 10 * $item;}); var_dump($data); // will output // [0=>10 , 1=>20]