一个简单的二维数组 分成多个数组 (笛卡尔积)

牧羊人之月 2011-06-03 07:18:46
例如:$arr=Array(
[0] => 32,
[1] => Array(
[0] => 24
[1] => 34
[2] => 43
[3] => 44
),
[2] => Array(
[0] => 55
[1] => 58
[2] => 72
),
[3] => 36)
我想将其分解成 $arr1=array([0] =>32,[1] =>24,[2]=>55,[3]=>36);
$arr2=array([0] =>32,[1] =>24,[2]=>58,[3]=>36);
$arr3=array([0] =>32,[1] =>24,[2]=>72,[3]=>36);
$arr4=array([0] =>32,[1] =>34,[2]=>55,[3]=>36);

其实就是求笛卡尔积;今天郁闷了半天 ;没有好的解决方案;真难过;哎
正确结贴。。。。。
...全文
515 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧羊人之月 2011-06-05
  • 打赏
  • 举报
回复
其实主要 我一直没想到一个可行的方案;呵呵;就是如何循环;
牧羊人之月 2011-06-04
  • 打赏
  • 举报
回复
呵呵 谢谢六楼的朋友 ;让我看看 ;俺笨的很
baoxiaohua 2011-06-04
  • 打赏
  • 举报
回复
看到很多都是用feach写的,所以我用for写了一个


<?php
$arr=Array(
0 => 32,
1 => Array(
0 => 24,
1=> 34,
2 => 43,
3 => 44,
),
2 => Array(
0 => 55,
1 => 58,
2 => 72,
),
3 => 36);
function arrs($arr){
for ($i=0;$i<count($arr[0]);$i++){
is_array($arr[0]) ? $s1=$arr[0][$ii] : $s1=$arr[0];
for($ii=0;$ii<count($arr[1]);$ii++){
$s2=$s1;
is_array($arr[1]) ? $s2=$s2.",".$arr[1][$ii] : $s2=$s2.",".$arr[1];
for($iii=0;$iii<count($arr[2]);$iii++){
$s3=$s2;
is_array($arr[2]) ? $s3=$s3.",".$arr[2][$iii] : $s3=$s3.",".$arr[2];
for($iiii=0;$iiii<count($arr[3]);$iiii++){
$s4=$s3;
is_array($arr[3]) ? $s4=$s4.",".$arr[3][$iiii] : $s4=$s4.",".$arr[3];
$arrs[]=$s4;
$s4='';
}
$s3='';
}
$s2='';
}
$s1='';
}
return $arrs;
}
print_r(arrs($arr));
?>



水平有限,写完后才发现如果做成递归应该会更好,这样你有数组中有多少元素都不怕了

有空把这个改成递归
黄袍披身 2011-06-04
  • 打赏
  • 举报
回复
跟我这个是一样的啦
已经结贴了 你就把分给 在我帖子回复的人吧
http://topic.csdn.net/u/20110531/17/dd79391a-ed60-4050-b741-409cf1cbe6d2.html
baoxiaohua 2011-06-04
  • 打赏
  • 举报
回复
这个论坛最近很流行笛卡尔积,哈哈,有空来写一个,现在很晚了,先过来接分
baoxiaohua 2011-06-04
  • 打赏
  • 举报
回复
这样也能拿到分数,真是惭愧,惭愧

建议写成递归,会好很多
牧羊人之月 2011-06-04
  • 打赏
  • 举报
回复
恩;谢谢 朋友 ;可以结贴了。。。。
ImN1 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 default7 的回复:]

你写出你的测试代码啊,方便别人测试
为什么要这样弄呢,还没看明白是啥规律……
[/Quote]

排列组合啦,每组选一个单元出来,组合成数列
第一组和第四组只有一个单元,所以数列头尾只能是32和36,中间两组就逐个列举

http://topic.csdn.net/u/20091011/12/bd610ef1-9923-4d27-b5ca-dcaa62e6bcc3.html
跟这个是一样的


用唠叨那个程式就行了
只是把二维数组分成四个一维数组
  • 打赏
  • 举报
回复
你写出你的测试代码啊,方便别人测试
为什么要这样弄呢,还没看明白是啥规律……
ImN1 2011-06-03
  • 打赏
  • 举报
回复
诶?又来?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧