更新
是的,我得到的部分是不建议将所有内容存储在单个阵列中。我一次添加了5000个组合的限制,但是有一个新问题。
我可以获得前5000个组合,但我无法想出任何可以产生其余组合的东西(5001到10000,10001到15000等等)
要生成前5000个组合,我使用每次循环运行时增加1的变量,当变量超过5000时,循环停止并打印结果。然而,在5000之后,如果我必须生成接下来的5000个组合,那么在到达接下来的5000个组合之前,循环也必须生成前5000个组合,这将再次消耗不必要的内存。
希望这是有道理的。
我希望生成所有可能的组合:
输入:
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),

期望的输出:
1111
1112
1113
1114
1115
1121
1122
1123
1124
1125
1131
1132
1133
1134
1135
1141
1142
1143
1144
1145
1151
1152
1153
1154
1155
1211
1212
1213
1214
1215
1221
1222
1223
1224
1225
1231
1232
1233
1234
1235
1241
1242
1243
1244
1245
1251
1252
1253
1254
1255
1311
1312
1313
1314
1315
1321
1322
1323
1324
1325
1331
1332
1333
1334
1335
1341
1342
1343
1344
1345
1351
1352
1353
1354
1355
1411
1412
1413
1414
1415
1421
1422
1423
1424
1425
1431
1432
1433
1434
1435
1441
1442
1443
1444
1445
1451
1452
1453
1454
1455
1511
1512
1513
1514
1515
1521
1522
1523
1524
1525
1531
1532
1533
1534
1535
1541
1542
1543
1544
1545
1551
1552
1553
1554
1555
2111
2112
2113
2114
2115
2121
2122
2123
2124
2125
2131
2132
2133
2134
2135
2141
2142
2143
2144
2145
2151
2152
2153
2154
2155
2211
2212
2213
2214
2215
2221
2222
2223
2224
2225
2231
2232
2233
2234
2235
2241
2242
2243
2244
2245
2251
2252
2253
2254
2255
2311
2312
2313
2314
2315
2321
2322
2323
2324
2325
2331
2332
2333
2334
2335
2341
2342
2343
2344
2345
2351
2352
2353
2354
2355
2411
2412
2413
2414
2415
2421
2422
2423
2424
2425
2431
2432
2433
2434
2435
2441
2442
2443
2444
2445
2451
2452
2453
2454
2455
2511
2512
2513
2514
2515
2521
2522
2523
2524
2525
2531
2532
2533
2534
2535
2541
2542
2543
2544
2545
2551
2552
2553
2554
2555
3111
3112
3113
3114
3115
3121
3122
3123
3124
3125
3131
3132
3133
3134
3135
3141
3142
3143
3144
3145
3151
3152
3153
3154
3155
3211
3212
3213
3214
3215
3221
3222
3223
3224
3225
3231
3232
3233
3234
3235
3241
3242
3243
3244
3245
3251
3252
3253
3254
3255
3311
3312
3313
3314
3315
3321
3322
3323
3324
3325
3331
3332
3333
3334
3335
3341
3342
3343
3344
3345
3351
3352
3353
3354
3355
3411
3412
3413
3414
3415
3421
3422
3423
3424
3425
3431
3432
3433
3434
3435
3441
3442
3443
3444
3445
3451
3452
3453
3454
3455
3511
3512
3513
3514
3515
3521
3522
3523
3524
3525
3531
3532
3533
3534
3535
3541
3542
3543
3544
3545
3551
3552
3553
3554
3555
4111
4112
4113
4114
4115
4121
4122
4123
4124
4125
4131
4132
4133
4134
4135
4141
4142
4143
4144
4145
4151
4152
4153
4154
4155
4211
4212
4213
4214
4215
4221
4222
4223
4224
4225
4231
4232
4233
4234
4235
4241
4242
4243
4244
4245
4251
4252
4253
4254
4255
4311
4312
4313
4314
4315
4321
4322
4323
4324
4325
4331
4332
4333
4334
4335
4341
4342
4343
4344
4345
4351
4352
4353
4354
4355
4411
4412
4413
4414
4415
4421
4422
4423
4424
4425
4431
4432
4433
4434
4435
4441
4442
4443
4444
4445
4451
4452
4453
4454
4455
4511
4512
4513
4514
4515
4521
4522
4523
4524
4525
4531
4532
4533
4534
4535
4541
4542
4543
4544
4545
4551
4552
4553
4554
4555
5111
5112
5113
5114
5115
5121
5122
5123
5124
5125
5131
5132
5133
5134
5135
5141
5142
5143
5144
5145
5151
5152
5153
5154
5155
5211
5212
5213
5214
5215
5221
5222
5223
5224
5225
5231
5232
5233
5234
5235
5241
5242
5243
5244
5245
5251
5252
5253
5254
5255
5311
5312
5313
5314
5315
5321
5322
5323
5324
5325
5331
5332
5333
5334
5335
5341
5342
5343
5344
5345
5351
5352
5353
5354
5355
5411
5412
5413
5414
5415
5421
5422
5423
5424
5425
5431
5432
5433
5434
5435
5441
5442
5443
5444
5445
5451
5452
5453
5454
5455
5511
5512
5513
5514
5515
5521
5522
5523
5524
5525
5531
5532
5533
5534
5535
5541
5542
5543
5544
5545
5551
5552
5553
5554
5555

我目前正在使用此代码生成组合:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$string = '';
function combinations($arrays, $i = 0) {
if (!isset($arrays[$i])) {
return array();
}
if ($i == count($arrays) - 1) {
return $arrays[$i];
}
// get combinations from subsequent arrays
$tmp = combinations($arrays, $i + 1);
$result = array();
// concat each array from tmp with each element from $arrays[$i]
foreach ($arrays[$i] as $v) {
foreach ($tmp as $t) {
$result[] = is_array($t) ?
array_merge(array($v), $t) :
array($v, $t);
}
}
return $result;
}
$array = combinations(
array(
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
)
);
foreach( $array as $combinations1 => $numbers )
{
foreach( $numbers as $number )
{
$string .= $number;
}
echo $string.'<br/>';
$string = ''; //unload
}
?>
&#13;
如果输入较小,则此代码有效,但对于较大的输入,例如:
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
array('1','2','3','4','5'),
&#13;
代码抛出以下错误:
致命错误:允许的内存大小为67108864字节(尝试分配72字节)
有没有更好的方法来做我想要的?
提前致谢:)
答案 0 :(得分:2)
为什么不只是一些嵌套循环?
$arr1 = array(1,2,3,4,5);
$arr2 = array(1,2,3,4,5);
...
$arrN = array(1,2,3,4,5);
$result = array();
foreach($arr1 as $val1) {
foreach($arr2 as $val2) {
...
foreach($arrN as $valN) {
$result[] = array($val1, $val2, ..., $valN);
}
}
}