php多维数组全部组合(可直接使用)

 正好用到时网上找到的代码,不过老外的代码用到了“按值传递”,在php5以上编译报错,我修改了一下。大家可以直接使用

function combos($data, &$all = array(), $group = array(), $val = null, $i = 0)
{
	if (isset($val))
	{
		array_push($group, $val);
	}

	if ($i >= count($data))
	{
		array_push($all, $group);
	}
	else
	{
		foreach ($data[$i] as $v)
		{
			combos($data,$all,$group, $v, $i + 1);
		}
	}

	return $all;
}

$data = array
(
	array('a', 'b'),
	array('e', 'f', 'g'),
	array('w', 'x', 'y', 'z'),
);

$combos = combos($data);

var_export($combos);

输出什么? 它会 输出 a e w,a e x .......b g z ,所有可能的排列组合。这在做一些业务算法匹配时很有用,和大家分享。 php中有按值传递,如函数中的&$all ,但是php创始者认为在php中有按值传递“影响代码的简洁性”,所以后面很可能会抛弃。 事实上你在函数体内使用 按值传递会报出 "Call-time pass-by-reference has been deprecated"这样的警告,目前的解决办法是在函数名上使用按值传递。不要在函数体内部用。同时不建议修改php.ini使 警告不产生,这是无节操的程序员。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rorg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值