mezon/functional

用于函数式编程的小巧快速框架

1.1.0 2021-12-07 06:12 UTC

This package is auto-updated.

Last update: 2024-09-07 11:46:39 UTC


README

Build Status codecov

简介

这个类提供了各种成员和工具用于函数式编程。它将帮助你以非常简单的方式处理数组。

模式

在这里,我们可以从数组的所有对象中获取指定的字段

$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]