我如何将两个字符串数组合并为所有可能的字符串来共享打开的用户名选项?(user_name, username, _use


How can I merge two arrays of strings into all possible strings to share open username options? (user_name, username, _username, etc.)

我想为那些选择了已经使用的用户名的用户建议用户名。

我如何建议他们的名字与各种下划线组合的所有可能的组合?

function username_options($name) {
    $spacers = array('_','');
    $username_options_array = array();
    // how can I iterate through all combinations no matter how many
    // words are included in the name?
    // ex. joesmith, _joesmith, _joe_smith, _joe_smith_
    //     joe_smith, joe_smith_,
    //     joesmith_
}
$names = array('joe smith','alan beta gamma','albert beta gamma delta');
foreach ($names as $name) {
    $username_options_array = username_options($name);
    print_r($username_options_array);
}

合并像joe smith这样的两个字符串很容易:

$a . $b
$a . '_' . $b
$a . $b . '_'
'_' . $a . $b
'_' . $a . $b . '_'
'_' . $a . '_' . $b . '_'

但是我如何更优雅地使用n名称中的字符串数?所以alan beta gamma deltajoe smith一样容易填充?

您需要定义一个函数,该函数根据要放置空格的位置返回所有间隔符的组合。

function everyCombination($count,$len) 
{
    $elems = pow($count,$len);
    $result = [];
    for($i=0;$i<$elems;$i++)
        $result[] = str_pad(base_convert($i,10,$count),$len,0,STR_PAD_LEFT);
    return $result;
}

现在这个函数返回你的分隔符数组的所有索引组合,你所需要做的就是将你的字符串($name)用空格展开,将分隔符和索引与数组的名称展开后结合起来。

function username_options($name) 
{
    $spacers = array('_','');
    $result = [];
    $words = explode(' ', $name);
    $combinations = everyCombination(count($spacers),count($words)+1);
    foreach ($combinations as $combin) 
    {
        $str = $words[] = "";
        for($i=0;$i<strlen($combin);$i++)
            $str .= $spacers[$combin[$i]] . $words[$i];
        $result[] = $str;
    }
    return $result;
}

现在测试完这个

$names = array('joe smith','alan beta gamma');
foreach ($names as $name) {
    $username_options_array = username_options($name);
    var_dump($username_options_array);
}

我得到的结果是:

array (size=8)
  0 => string '_joe_smith_' (length=11)
  1 => string '_joe_smith' (length=10)
  2 => string '_joesmith_' (length=10)
  3 => string '_joesmith' (length=9)
  4 => string 'joe_smith_' (length=10)
  5 => string 'joe_smith' (length=9)
  6 => string 'joesmith_' (length=9)
  7 => string 'joesmith' (length=8)
array (size=16)
  0 => string '_alan_beta_gamma_' (length=17)
  1 => string '_alan_beta_gamma' (length=16)
  2 => string '_alan_betagamma_' (length=16)
  3 => string '_alan_betagamma' (length=15)
  4 => string '_alanbeta_gamma_' (length=16)
  5 => string '_alanbeta_gamma' (length=15)
  6 => string '_alanbetagamma_' (length=15)
  7 => string '_alanbetagamma' (length=14)
  8 => string 'alan_beta_gamma_' (length=16)
  9 => string 'alan_beta_gamma' (length=15)
  10 => string 'alan_betagamma_' (length=15)
  11 => string 'alan_betagamma' (length=14)
  12 => string 'alanbeta_gamma_' (length=15)
  13 => string 'alanbeta_gamma' (length=14)
  14 => string 'alanbetagamma_' (length=14)
  15 => string 'alanbetagamma' (length=13)