Генерировать рандомные числа в заданном диапазоне с заданным количеством
Мне нужно изменить текст на последовательность из нуля и единиц случайным образом. И что бы количество нулей и единиц равнялось количеству символов которые были изначально в файле.
Я знаю что есть функция
mt_rand(min,max)
Но к сожалению она выводит только одно число, а мне надо такое же количество как и символов в файле.
$quantity_string = mb_strlen(strip_tags( implode('', file ('file.txt')) ));
Так я узнаю количество символов в тексте, но вот как их заменить на последовательность из 0 и 1 которое будет совпадать с количеством изначальных символов я не знаю.
$change_file1 = '1010101010101010';
file_put_contents('changeValue.txt', $change_file1);
А вот так я меняю значение в файле
У кого какие идеи?
UPD: Я немного изменил код @cassius , но теперь весь текст который был в файле преобразуется только в один символ 0 или 1 (рандомно)
$strSource = file('file/change value.txt'); // исходная строка
$strSouce_to_array = implode($strSource); // строка в массив
$arraySource = str_split($strSouce_to_array);
$arrayBinary = array_map(function() {
return rand(0, 1);
}, $arraySource);
$strBinary = implode($arrayBinary); // закодированная строка
echo $strBinary;
Ответы (2 шт):
Алгоритм такой: нужно исходную строку преобразовать в массив, потом каждый элемент массива заменить символом 0 или 1, далее полученный массив преобразовать в строку.
$strSource = "Hello world!"; // исходная строка
$arraySource = str_split($strSource);
$arrayBinary = array_map(function() {
return rand(0, 1);
}, $arraySource);
$strBinary = implode($arrayBinary); // закодированная строка
Можно взять длину строки и создать случайную такой же длины.
$strSource = "Hello World!";
var_dump($strSource, strToRndBin($strSource));
//string(12) "Hello World!"
//string(12) "100010101100"
$strSource = "Привет мир!";
var_dump($strSource, strToRndBin($strSource));
//string(20) "Привет мир!"
//string(11) "10011000110"
function strToRndBin($string) {
$len = mb_strlen($string);
$string = '';
for($i=0; $i<$len; $i++)
$string .= rand(0,1);
return $string;
}
Если нужно именно изменить строку то, можно передать ссылку
$strSource = "Привет мир!";
strToRndBin($strSource);
var_dump($strSource);
//string(11) "11011010110"
function strToRndBin(&$string) {
$len = mb_strlen($string);
$string = '';
for($i=0; $i<$len; $i++)
$string .= rand(0,1);
return $string;
}