2016-02-04 88 views
0

我试图创建值的数组或一个字符串字符串置换获得的随机值,这是我过得怎么样:合并子数组,并从结果数组

function aliasName($string) 
{ 
    $names = []; 

    if (is_array($string)) { 
     foreach ($string as $str) { 
      $names[] = internalProcessing($str); 
     } 
    } else { 
     $names[] = internalProcessing($string); 
    } 

    return $names[array_rand($names)]; 
} 

function internalProcessing($str) 
{ 
    $names = []; 

    $input = strtolower($str); 
    $length = strlen($input); 
    $counter = pow(2, $length); 

    for ($i = 0; $i < $counter; ++$i) { 
     $binaryStr = str_pad(decbin($i), $length, '0', STR_PAD_LEFT); 

     $variant = ''; 
     for ($j = 0; $j < $length; ++$j) { 
      $variant .= ($binaryStr[$j] == '1') ? strtoupper($input[$j]) : $input[$j]; 
     } 

     $names[] = $variant; 
    } 

    return $names; 
} 

$test1 = ['Mami', 'Abonis', 'Acierto', 'Alison', 'Bato', 'Chiste', 'Amada', 'Calor', 'Dato', 'Fiera', 'Exito']; 
$test2 = 'mamI'; 

$test1Result = aliasName($test1); 
$test2Result = aliasName($test2); 

echo "\n test1 -------------------------------- \n"; 
var_export($test1Result); 
echo "\n test2 -------------------------------- \n"; 
var_export($test2Result); 

代码工作不错,但我有几个问题,我需要一些帮助。如果你在一个控制台脚本运行上面的代码中,你应该看到类似下面的输出:

# php test.php 

test1 -------------------------------- 
array (
    0 => 'abonis', 
    1 => 'aboniS', 
    2 => 'abonIs', 
    3 => 'abonIS', 
    4 => 'aboNis', 
    5 => 'aboNiS', 
    6 => 'aboNIs', 
    7 => 'aboNIS', 
    8 => 'abOnis', 
    9 => 'abOniS', 
    10 => 'abOnIs', 
    ... 
) 

test2 -------------------------------- 
array (
    0 => 'mami', 
    1 => 'mamI', 
    2 => 'maMi', 
    3 => 'maMI', 
    4 => 'mAmi', 
    5 => 'mAmI', 
    6 => 'mAMi', 
    7 => 'mAMI', 
    8 => 'Mami', 
    9 => 'MamI', 
    10 => 'MaMi', 
    ... 
) 

test2输出是不错,但test1不是。如果你倾倒的$namesinternalProcessing()(就在返回之前)的内容,你会得到这样的:

// var_export($names); 
// return $names; 

# php test.php 
array (
    0 => 'mami', 
    1 => 'mamI', 
    ... 
)array (
    0 => 'abonis', 
    1 => 'aboniS', 
    ... 
)array (
    0 => 'acierto', 
    1 => 'aciertO', 
    ... 
)array (
    0 => 'alison', 
    1 => 'alisoN', 
    ... 
)array (
    0 => 'bato', 
    1 => 'batO', 
    ... 
)array (
    0 => 'chiste', 
    1 => 'chistE', 
    ... 
)array (
    0 => 'amada', 
    1 => 'amadA', 
    ... 
)array (
    0 => 'calor', 
    1 => 'caloR', 
    ... 
)array (
    0 => 'dato', 
    1 => 'datO', 
    ... 
)array (
    0 => 'fiera', 
    1 => 'fierA', 
    ... 
)array (
    0 => 'exito', 
    1 => 'exitO', 
    ... 
)array (
    0 => 'mami', 
    1 => 'mamI', 
    ... 
) 

我需要的是输出转换成类似:

$result_array = array (
    0 => 'mami', 
    1 => 'mamI', 
    ..., 
    0 => 'abonis', 
    1 => 'aboniS', 
    ..., 
    0 => 'acierto', 
    1 => 'aciertO', 
    ..., 
    0 => 'alison', 
    1 => 'alisoN', 
    ..., 
    0 => 'bato', 
    1 => 'batO', 
    ..., 
    0 => 'chiste', 
    1 => 'chistE', 
    ..., 
    0 => 'amada', 
    1 => 'amadA', 
    ..., 
    0 => 'calor', 
    1 => 'caloR', 
    ..., 
    0 => 'dato', 
    1 => 'datO', 
    ..., 
    0 => 'fiera', 
    1 => 'fierA', 
    ..., 
    0 => 'exito', 
    1 => 'exitO', 
    ..., 
    0 => 'mami', 
    1 => 'mamI', 
    ... 
) 

最后,如果输入是一个值的数组,然后我应该返回0和count($ result_array)之间的任何随机值。我尝试过array_merge(),但因为我得到错误的结果,所以不适合我。任何人都可以在这里推动一下吗?

+0

test1的输出有什么问题,那在test2中没有错? – trincot

回答

1

确实这样数组的数组,如internalProcessing返回一个数组,你把结果作为数组元素的包装阵列这样的:

$names[] = internalProcessing(...); 

相反,你应该存储结果internalProcessing如下(出现两次):

$names = array_merge($names, internalProcessing(...)); 

那请问,你可以在这个fiddle看到的伎俩。

+0

没有为我工作,我得到相同的数组阵列,你试过了吗? – ReynierPM

+0

nvm,由于第一个结果是一个多维数组,因此我已经从'array_merge'更改为'array_merge_recursive'并完成这项工作。感谢您的领导! – ReynierPM

+0

用你给出的例子不需要'array_merge_recursive'(我添加了一个小提琴),但我很高兴它为你工作。 – trincot