0

在 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 ..(在生成具有上述字符的随机字符串后(在 ae 之间),我应该生成另一个包含与每个字符相关的随机值的字符串。这不是作业或类似的东西。

提前感谢您的理解..

4

3 回答 3

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是结果。

于 2012-07-21T17:53:05.937 回答
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]
} 
于 2012-07-21T17:54:24.703 回答
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;
于 2012-07-21T17:57:40.760 回答