Я пытаюсь создать строку перестановку для массива значений или для одной строки и это, как я делаю:Слияние подмассива и получить случайные значения из результирующего массива
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
нет. Если сбросить содержание $names
в internalProcessing()
(как раз перед возвращением) вы получите что-то вроде:
// 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',
...
)
И, наконец, если input - это массив значений, тогда я должен возвращать любые случайные значения между 0 и count ($ result_array). Я пробовал array_merge()
, но не работал для меня, так как я получил неправильный результат. Может ли кто-нибудь дать мне толчок здесь?
Что не так с выходом test1, что не так в test2? – trincot