0

MySqlの自動インクリメントに似た関数を作っていますが、値の配列を使用しています

$array = array('a','b','c','d','e','f','g','h','i','j','k','l','m',
               'n','o','p','q','r','s','t','u','v','w','x','y','z',
               'A','B','C','D','E','F','G','H','I','J','K','L','M',
               'N','P','Q','R','S','T','U','V','W','X','Y','Z',
               '1','2','3','4','5','6','7','8','9','0',
               '~',-','_');

この配列に従って次の文字列を取得したい。私が持っている"aH?"としたら、次の文字列は である必要があります"aIa"または、私の文字列が"???"そうである場合、私のネスト文字列は である必要があります"aaaa"。最善かつ最速の方法を教えてください。

4

4 に答える 4

0

これは、これを処理する最も洗練された方法ではないかもしれませんが、提供された配列を本当に使用する必要がある場合は、この関数が役立ちます。

function getNext($s, $array) {
  static $remember;
  $last = substr($s, -1);
  $key = array_search($last, $array);
  if ($s === "") {
      $remember .= "a";
      return $remember; 
  } else if (isset($array[$key+1])) {
    return substr_replace($s, $array[$key+1], -1) . $remember;
  } else {
    $remember .= "a";
    return getNext(substr($s, 0, -1), $array);
  }
}

いくつかの出力例:

echo getNext("abcd", $array); //abce
echo getNext("??a?", $array); //??ba
echo getNext("???", $array); //aaaa
echo getNext("abc??", $array); //abdaa
于 2013-06-11T00:35:59.570 に答える