我是一个新手,当谈到PHP,我想尝试一些东西,但我完全不知道我该怎么做..说实话,我不知道是否可以非常清楚地解释这个...让我们开始..
我有几个字母,例如a,b,c,d和e ..
对于他们每个人我都有两个像这样的两个特征值:
a - > fg,dz,gc,bg
b - > zt,hg,oq,vg,gb
c - > lt,pr,cs,sh,pr
d - > kt,nt,as,pr
e - > zd,ke,cg,sq,mo,ld
问题出现了:
我想每次获得一个随机值,例如:dcbae 为此,最终输出应该是这样的:ntshztdzld或asltvggcmo .. (在使用上面的字符串(在a-e之间)生成随机字符串之后,我应该生成另一个字符串,其中包含与每个字符相关的随机值。 这不是家庭作业或类似的东西。
提前感谢您的理解..
答案 0 :(得分:3)
嗯,你首先要创建一个地图:
$map = Array(
"a" => Array("fg","dz","gc","bg"),
"b" => Array("zt","hg","oq","vg","gb"),
"c" => Array("lt","pr","cs","sh","pr"),
"d" => Array("kt","nt","as","pr"),
"e" => Array("zd","ke","cg","sq","mo","ld")
);
我注意到您有几次相同的“pr”对 - 如果您希望此编码可以反转,请避免重复。
无论如何,一旦你拥有它,就可以很容易地循环输入字符串并获得随机输出:
$input = "dcbae";
$len = strlen($input);
$output = "";
for( $i=0; $i<$len; $i++) {
$entry = &$map[$input[$i]];
if( isset($entry)) $output .= $entry[mt_rand(0,count($entry)-1)];
else $output .= "??";
}
结果是 $output
。
答案 1 :(得分:1)
<?php
// Setup matching values
$encpairs[ 'a' ] = array( 'fg', 'dz', 'gc', 'bg' );
$encpairs[ 'b' ] = array( 'zt', 'hg', 'oq', 'vg', 'gb' );
$encpairs[ 'c' ] = array( 'lt', 'pr', 'cs', 'sh', 'pr' );
// etc. etc.
// Define input string
$my_string = 'abc';
// To randomly build input string
$my_string = '';
$last_key = '';
$key = '';
$keys = array_keys( $encpairs );
$ttl_keys = count( $keys ) -1;
// Generate the input string at random; change "5" to length you desire
for ( $j=0; $j < 5; $j++ ){
// Randomly select a key from $encpairs array (giving you one letter at random)
// The while loop ensures no two letters are used consecutively
while ( $key == $last_key ) {
$key =$keys[ rand(0, $ttl_keys ) ];
}
$last_key = $key;
$my_string .= $key;
}
// Determine input string length
$length = strlen( $my_string );
// Loop through each letter
$output = '';
for( $i=0; $i < $length; $i++ ){
shuffle( $encpairs[ $my_string[$i] ] );
$output.= $encpairs[ $my_string[$i] ][0]; // Added [0]
}
答案 2 :(得分:0)
首先在循环外初始化第二个字符串。将原始字符串(要加密)转换为数组,然后遍历整个数组并追加到第二个字符串。 所以你得到了
$splitstr=str_split($original);
$final_string="";
$map=Array(/**/);
foreach($splitstr as $char)
{
$final_string.=$map[$char][rand(0,count($map[$char])-1)];
}
return $final_string;