0

私はphpに関してはかなり初心者で、何かを試したかったのですが、どうすればよいかまったくわかりません。正直なところ、これを非常に明確に説明できるかどうかはわかりません。始めましょう。 ..

たとえば、a、b、c、d、eなどの文字がいくつかあります。

そして、それらのそれぞれについて、私はこのような2文字の値のカップルを持っています:

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

ループの外側で2番目の文字列を初期化することから始めます。元の文字列(暗号化される)を配列に変換してから、配列全体をループして2番目の文字列に追加します。だからあなたは得る

$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 に答える