php мне нужна каждая строка uniq generate_string и preg_replace - PullRequest
0 голосов
/ 01 мая 2020

Я хочу заменить каждую строку кодом php, используя preg_replace, но это не дает мне uniq каждую строку. Мне нужна каждая строка uniq


<?php      
$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

function generate_string($input, $strength = 16) {
    $input_length = strlen($input);
    $random_string = '';
    for($i = 0; $i < $strength; $i++) {
        $random_character = $input[mt_rand(0, $input_length - 1)];
        $random_string .= $random_character;
    }

    return $random_string;
}

$new= generate_string($permitted_chars, 30);
$old='/^[a-zA-Z0-9]+/m';

$data = file_get_contents("txt.txt");
$newdata = preg_replace($old, $new, $data);

file_put_contents("txt.txt", $newdata);
?>

screenshot

1 Ответ

1 голос
/ 01 мая 2020

Вы создали только один случайный уникальный идентификатор с вашим вызовом на

$new= generate_string($permitted_chars, 30);

Это значение $new теперь будет использоваться при любых заменах, которые вы делаете. Таким образом, очевидно, что это то же самое для каждой строки.

Вы должны позвонить generateString() для каждой строки в отдельности. Вы можете использовать preg_replace_callback() и предоставить функцию, которая генерирует новое значение для каждой вашей строки.

// example data
$data = "1|http://www.example.org
5|http://www.example.org/again
30|http://www.example.org/another_one";

$old = '/^[a-zA-Z0-9]+/m';
$newdata = preg_replace_callback(
    $old, // the regex
    function($matches) use ($permitted_chars) { // the magic anonymous function
        return generate_string($permitted_chars, 30);
    },
    $data); // the original data
echo $newdata;

Это может генерировать вывод, подобный следующему:

5ZcOpJIXO7Q0YNQWRlTxc16LZSlrqy|http://www.example.org
JeoGTQz6HYSZcF3iUrm2YS66AXXDH0|http://www.example.org/again
Wp4UIdv24IK6SxuUr9m9R2TuO4Cjzb|http://www.example.org/another_one
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...