【问题标题】:Generate sequence of strings from array [closed]从数组生成字符串序列[关闭]
【发布时间】:2017-07-05 09:16:34
【问题描述】:

我有一个字母数组:

$ga = array_merge(range('A', 'Z'), range(0,9));

如何生成下一个字符串:

AAAA, AAAB... AAAZ, AAA0... AAA9, AABA, AA9A... ABAA... 9999

谢谢!

【问题讨论】:

标签: php arrays string


【解决方案1】:

这可能是最简单的方法:

<?php
$alphabeth = array_merge(range('A', 'Z'), range(0,9));
$character = [];
foreach ($alphabeth as $character[0]) {
  foreach ($alphabeth as $character[1]) {
    foreach ($alphabeth as $character[2]) {
      foreach ($alphabeth as $character[3]) {
        $catalog[] = vsprintf('%s%s%s%s', $character);
      }
    }
  }
}
print_r($catalog);

输出显然是:

Array
(
    [0] => AAAA
    [1] => AAAB
    [2] => AAAC
    [3] => AAAD
    .....
    [1679613] => 9997
    [1679614] => 9998
    [1679615] => 9999
)

更新:

如果我没听错的话,您在下面的 cmets 中提到您需要将这些字符串填充到文件中。如果是这样,那么这将是一个顺序处理的示例,它可以显着减少脚本内存占用,正如 cmets 中所提到的:

<?php
$alphabeth = array_merge(range('A', 'Z'), range(0,9));
$handle = fopen('/home/arkascha/catalog.list', 'w');
foreach ($alphabeth as $character[0]) {
  foreach ($alphabeth as $character[1]) {
    foreach ($alphabeth as $character[2]) {
      foreach ($alphabeth as $character[3]) {
        fwrite($handle, vsprintf("%s%s%s%s\n", $character));
      }
    }
  }
}
fclose($handle);

【讨论】:

  • 我哭了 :) 512 MB 内存是不够的 感谢您的好回答。
  • @ChooHwan 问题是您是否真的需要这样的静态目录。在效率方面,通常顺序处理数据是比这更好的方法。
  • 我明白了。谢谢!我必须用文本文件填写这些字符串。
  • 我没有任何使用php的个人经验yield;这可以集成以绕过内存吗?老实说,我不知道。
  • @ChooHwan 抱歉,不,生成器无法让您绕过嵌套循环创建一个巨大的数组,这是实际问题。它只是另一种迭代方式,通常用于更复杂的迭代策略。您正在寻找的是已经提到的顺序处理策略。我更新了答案并为此添加了一个示例。这有什么帮助:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2018-05-23
  • 1970-01-01
  • 2012-08-16
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多