【PHP】笛卡尔积
- 方法
namespace CarteSian;
class CarteSian
{
/**
* Store results
*
* @var array
*/
public $products = [];
/**
* Calculate the Cartesian product
*
* @param array $params
* @param array $temporary
*/
public function carteSian(array $params, array $temporary = [])
{
foreach (
array_shift($params) as $param
) {
array_push($temporary, $param);
$params ? $this->carteSian(
$params, $temporary
) : array_push(
$this->products, $temporary
);
array_pop($temporary);
}
}
}
- 使用
$cartSian = new CarteSian();
$params = [[1,2],[3,4],[5,6]];
$cartSian->carteSian($params);
print_r($cartSian->products);
- 结果
Array
(
[0] => Array
(
[0] => 1
[1] => 3
[2] => 5
)
[1] => Array
(
[0] => 1
[1] => 3
[2] => 6
)
[2] => Array
(
[0] => 1
[1] => 4
[2] => 5
)
[3] => Array
(
[0] => 1
[1] => 4
[2] => 6
)
[4] => Array
(
[0] => 2
[1] => 3
[2] => 5
)
[5] => Array
(
[0] => 2
[1] => 3
[2] => 6
)
[6] => Array
(
[0] => 2
[1] => 4
[2] => 5
)
[7] => Array
(
[0] => 2
[1] => 4
[2] => 6
)
)
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
非常的不错、、、、、