当前位置:Gxlcms > PHP教程 > 经典的笛卡尔乘积代码,要如何修改它

经典的笛卡尔乘积代码,要如何修改它

时间:2021-07-01 10:21:17 帮助过:5人阅读

经典的笛卡尔乘积代码,要怎么修改它?
笛卡尔乘积代码:


function Descartes() {
$t = func_get_args();
if(func_num_args() == 1) return call_user_func_array( __FUNCTION__, $t[0] );
$a = array_shift($t);
if(! is_array($a)) $a = array($a);
$a = array_chunk($a, 1);
do {
$r = array();
$b = array_shift($t);
if(! is_array($b)) $b = array($b);
foreach($a as $p)
foreach(array_chunk($b, 1) as $q)
$r[] = array_merge($p, $q);
$a = $r;
}while($t);
return $r;
}

$arr = array(
array('a1','a2'),
'b',
array('c1','c2'),
array('d1','d2','d3'),
array('e1','e2','e3')
//......省略其它元素(也可以是数组),
);

$r = Descartes( $arr );
print_r($r);
?>

//////////////////////////////////////

输出:

Array
(
[0] => Array
(
[0] => a1
[1] => b
[2] => c1
[3] => d1
[4] => e1
)
[1] => Array
(
[0] => a1
[1] => b
[2] => c1
[3] => d1
[4] => e2
)
...。。。



////////////////////
现在我只想要3个元素,第一个元素要有a1或a2。那段代码要怎么改?
Array
(
[0] => Array
(
[0] => a1
[1] => b
[2] => c1
)
......
[1] => Array
(
[0] => a2
[1] => c2
[2] => d3
)
......




------解决方案--------------------
对于
$arr = array(
array('a1','a2'),
'b',
array('c1','c2'),
array('d1','d2','d3'),
array('e1','e2','e3')
//......省略其它元素(也可以是数组),
);
需先对
$arr = array(
'b',
array('c1','c2'),
array('d1','d2','d3'),
array('e1','e2','e3')
//......省略其它元素(也可以是数组),
);
求 M 取 2 的组合
$c = combination($arr, 2);
然后对组合的结果求笛卡尔积

$r = array();
foreach($c as $v)
$r = array_merge($r, Descartes( array('a1','a2'), $v[0], $v[1] ));
print_r($r);
PHP code
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => a1
  6. [1] => d1
  7. [2] => e1
  8. )
  9. [1] => Array
  10. (
  11. [0] => a1
  12. [1] => d1
  13. [2] => e2
  14. )
  15. [2] => Array
  16. (
  17. [0] => a1
  18. [1] => d1
  19. [2] => e3
  20. )
  21. [3] => Array
  22. (
  23. [0] => a1
  24. [1] => d2
  25. [2] => e1
  26. )
  27. [4] => Array
  28. (
  29. [0] => a1
  30. [1] => d2
  31. [2] => e2
  32. )
  33. [5] => Array
  34. (
  35. [0] => a1
  36. [1] => d2
  37. [2] => e3
  38. )
  39. [6] => Array
  40. (
  41. [0] => a1
  42. [1] => d3
  43. [2] => e1
  44. )
  45. [7] => Array
  46. (
  47. [0] => a1
  48. [1] => d3
  49. [2] => e2
  50. )
  51. [8] => Array
  52. (
  53. [0] => a1
  54. [1] => d3
  55. [2] => e3
  56. )
  57. [9] => Array
  58. (
  59. [0] => a2
  60. [1] => d1
  61. [2] => e1
  62. )
  63. [10] => Array
  64. (
  65. [0] => a2
  66. [1] => d1
  67. [2] => e2
  68. )
  69. [11] => Array
  70. (
  71. [0] => a2
  72. [1] => d1
  73. [2] => e3
  74. )
  75. [12] => Array
  76. (
  77. [0] => a2
  78. [1] => d2
  79. [2] => e1
  80. )
  81. [13] => Array
  82. (
  83. [0] => a2
  84. [1] => d2
  85. [2] => e2
  86. )
  87. [14] => Array
  88. (
  89. [0] => a2
  90. [1] => d2
  91. [2] => e3
  92. )
  93. [15] => Array
  94. (
  95. [0] => a2
  96. [1] => d3
  97. [2] => e1
  98. )
  99. [16] => Array
  100. (
  101. [0] => a2
  102. [1] => d3
  103. [2] => e2
  104. )
  105. [17] => Array
  106. (
  107. [0] => a2
  108. [1] => d3
  109. [2] => e3
  110. )
  111. [18] => Array
  112. (
  113. [0] => a1
  114. [1] => c1
  115. [2] => e1
  116. )
  117. [19] => Array
  118. (
  119. [0] => a1
  120. [1] => c1
  121. [2] => e2
  122. )
  123. [20] => Array
  124. (
  125. [0] => a1
  126. [1] => c1
  127. [2] => e3
  128. )
  129. [21] => Array
  130. (
  131. [0] => a1
  132. [1] => c2
  133. [2] => e1
  134. )
  135. [22] => Array
  136. (
  137. [0] => a1
  138. [1] => c2
  139. [2] => e2
  140. )
  141. [23] => Array
  142. (
  143. [0] => a1
  144. [1] => c2
  145. [2] => e3
  146. )
  147. [24] => Array
  148. (
  149. [0] => a2
  150. [1] => c1
  151. [2] => e1
  152. )
  153. [25] => Array
  154. (
  155. [0] => a2
  156. [1] => c1
  157. [2] => e2
  158. )
  159. [26] => Array
  160. (
  161. [0] => a2
  162. [1] => c1
  163. [2] => e3
  164. )
  165. [27] => Array
  166. (
  167. [0] => a2
  168. [1] => c2
  169. [2] => e1
  170. )
  171. [28] => Array
  172. (
  173. [0] => a2
  174. [1] => c2
  175. [2] => e2
  176. )
  177. [29] => Array
  178. (
  179. [0] => a2
  180. [1] => c2
  181. [2] => e3
  182. )
  183. [30] => Array
  184. (
  185. [0] => a1
  186. [1] => c1
  187. [2] => d1
  188. )
  189. [31] => Array
  190. (
  191. [0] => a1
  192. [1] => c1
  193. [2] => d2
  194. )
  195. [32] => Array
  196. (
  197. [0] => a1
  198. [1] => c1
  199. [2] => d3
  200. )
  201. [33] => Array
  202. (
  203. [0] => a1
  204. [1] => c2
  205. [2] => d1
  206. )
  207. [34] => Array
  208. (
  209. [0] => a1
  210. [1] => c2
  211. [2] => d2
  212. )
  213. [35] => Array
  214. (
  215. [0] => a1
  216. [1] => c2
  217. [2] => d3
  218. )
  219. [36] => Array
  220. (
  221. [0] => a2
  222. [1] => c1
  223. [2] => d1
  224. )
  225. [37] => Array
  226. (
  227. [0] => a2
  228. [1] => c1
  229. [2] => d2
  230. )
  231. [38] => Array
  232. (
  233. [0] => a2
  234. [1] => c1
  235. [2] => d3
  236. )
  237. [39] => Array
  238. (
  239. [0] => a2
  240. [1] => c2
  241. [2] => d1
  242. )
  243. [40] => Array
  244. (
  245. [0] => a2
  246. [1] => c2
  247. [2] => d2
  248. )
  249. [41] => Array
  250. (
  251. [0] => a2
  252. [1] => c2
  253. [2] => d3
  254. )
  255. [42] => Array
  256. (
  257. [0] => a1
  258. [1] => b
  259. [2] => e1
  260. )
  261. [43] => Array
  262. (
  263. [0] => a1
  264. [1] => b
  265. [2] => e2
  266. )
  267. [44] => Array
  268. (
  269. [0] => a1
  270. [1] => b
  271. [2] => e3
  272. )
  273. [45] => Array
  274. (
  275. [0] => a2
  276. [1] => b
  277. [2] => e1
  278. )
  279. [46] => Array
  280. (
  281. [0] => a2
  282. [1] => b
  283. [2] => e2
  284. )
  285. [47] => Array
  286. (
  287. [0] => a2
  288. [1] => b
  289. [2] => e3
  290. )
  291. [48] => Array
  292. (
  293. [0] => a1
  294. [1] => b
  295. [2] => d1
  296. )
  297. [49] => Array
  298. (
  299. [0] => a1
  300. [1] => b
  301. [2] => d2
  302. )
  303. [50] => Array
  304. (
  305. [0] => a1
  306. [1] => b
  307. [2] => d3
  308. )
  309. [51] => Array
  310. (
  311. [0] => a2
  312. [1] => b
  313. [2] => d1
  314. )
  315. [52] => Array
  316. (
  317. [0] => a2
  318. [1] => b
  319. [2] => d2
  320. )
  321. [53] => Array
  322. (
  323. [0] => a2
  324. [1] => b
  325. [2] => d3
  326. )
  327. [54] => Array
  328. (
  329. [0] => a1
  330. [1] => b
  331. [2] => c1
  332. )
  333. [55] => Array
  334. (
  335. [0] => a1
  336. [1] => b
  337. [2] => c2
  338. )
  339. [56] => Array
  340. (
  341. [0] => a2
  342. [1] => b
  343. [2] => c1
  344. )
  345. [57] => Array
  346. (
  347. [0] => a2
  348. [1] => b
  349. [2] => c2
  350. )
  351. )

人气教程排行