PHP字生成器

时间:2016-03-09 18:59:01

标签: php arrays brute-force

我发现这段代码通过stackoverflow上的给定字符串生成单词,并且在我看来,它完美地运行,只有一个问题...它使用数组并且我们都知道数组具有最大维度,所以我问你是否有办法改变这个代码,以便不使用数组,但只有" echo"或者可能是外部.txt文件或任何你想要没有内存限制的文件

$letters = str_split("abc");

$combos = $letters;
$lastres = $letters;
for ($i = 1; $i < count($letters); $i++) {
    $newres = array();
    foreach ($lastres as $r) {
        foreach ($letters as $let) {
            $newres[] = $r . $let;

        }
    }

    foreach ($newres as $w) {
        $combos[] = $w;
    }

    $lastres = $newres;
}
foreach($combos as $comb){
    echo $comb."<br>";
}

我试图想出一个解决方案,但无法得到它:/
如果需要,可以按照自己的意愿更改代码,没有问题。

2 个答案:

答案 0 :(得分:1)

唯一变得非常大的数组是$combos。如果您不需要保存生成的所有单词,只需将单词打印出来而不是将其添加到此数组中。所以只需改变:

    $combos[] = $w;

    echo $w . '<br>';

但是如果你生成这么多单词会导致服务器出现内存问题,那么将结果发送到浏览器可能也会花费很长时间,并且浏览器可能会因内存不足而试图显示页面

答案 1 :(得分:0)

在某种程度上,您可能会认为数组具有“最大维度”。但是,他们拥有此最大维度或大小的唯一原因是因为PHP具有不能超过的最大内存限制。同样的限制也适用于内存中存储的任何PHP,它可以是字符串,缓冲区,图像等。因此,只需将数组转换为字符串就无法解决限制问题。

除非你有一个非常长的单词,或者你的服务器上无法更改的内存限制非常低,否则我建议只使用数组,因为它可以在10个案例中的9个中使用。