2015-04-30 58 views
2
用下劃線(_)替換字符串多個隨機字符

我使用像「gjhyYhK」,「HJjhkeuJ」等代碼,但希望用戶展示這些代碼,如:如何在PHP

gj_y__K

HJj__e_J

表示代碼將在代碼中隨機位置用「_」編輯。

+0

多大比例的字符你想要更換? –

+0

priyanka顯示你試過什麼?把你的代碼以及 –

+0

嗨帕拉!我想刪除40%的字符。 –

回答

0

這會做你想要什麼:

$str = "gjhyYhK"; 

    $len = strlen($str); 
    $num_to_remove = ceil($len * .4); // 40% removal 
    for($i = 0; $i < $num_to_remove; $i++) 
    { 
    $k = 0; 
    do 
    { 
     $k = rand(1, $len); 
    } while($str[$k-1] == "_"); 
    $str[$k-1] = "_"; 
    } 
    print $str . "\n"; 

如果你想要更多的下劃線,改變$underscores值。這將保證你得到你想要的,只要多少突顯,只要你想比字符串的長度較少

0

你可以試試下面的代碼來得到你正在尋找

<?php 
$string = "gjhyYhK"; 
$percentage = 40; 
$total_length = strlen($string); 
$number_of_underscore = floor(($percentage/100) * $total_length); // I have use floor value, you can use ceil() as well 
for ($i = 1; $i <= $number_of_underscore; $i++) 
{ 
    $random_position = rand(0, strlen($string) - 1); // get the random position of character to be replaced 
    if (substr($string, $random_position, 1) !== '_') // check if its already replaced underscore (_) 
    { 
     $string = preg_replace("/" . (substr($string, $random_position, 1)) . "/", '_', $string, 1); // here preg_replaced use to replace the character only once, (i.e str_replace() will replace all matching characters) 
    } 
    else 
    { 
     $i--; // else decrement $i for the loop to run one more time 
    } 
} 
echo $string; 
?> 

讓我的功能知道是否有其他需要幫助

+0

你正在改變字符串的長度 - 所有的字符仍然存在,以相同的順序。只是與他們之間的下劃線 –

+0

@pala_答案更新,請刪除downvote .. –

-1
$str = "ADFJ"; 
$strlen = strlen($str); 
$newStr = ''; 
for ($i = 0; $i < $strlen; $i++) { 
    if ($i == rand(0, $strlen)) { 
     $newStr .= '_'; 
    } else { 
     $newStr .= $str[$i]; 
    } 
} 
echo $newStr; 
+0

AD_FJ,ADF_J,A_D_FJ這就是我正在得到 –

+0

運行它一些。你會明白我的意思。更何況你實際上並沒有取代任何字符,只是將字符串拉伸出來 –

+0

你現在可以試試。編輯答案 –

0

試試這個:

$string=array(
    'gjhyYhK', 
    'HJjhkeuJ' 
); 
$arr=array(); 
foreach ($string as $key=>$value) { 
    $arr[$key]=''; 
    for ($i=1; $i <=strlen($value); $i++) { 
     if(rand(0,1)){ 
      $arr[$key].=substr($string[$key],$i,1); 
     }else{ 
      $arr[$key].='_'; 
     } 
    } 
} 
var_dump($arr);