2016-10-06 29 views
0

私はmyarray [1]とmyarray ["1"]が同じものを指していることを知っています。しかし、その知識を持っていても、まだ少し問題があります。php配列 - 数値文字列インデックス

私はこれを持っている:

$KEYS = ["1", "2", "3", "4", "5", "6", "7", "8", "9", 
       "A", "B", "C", "D", "E", "F", "G", "H", "J", 
       "K", "L", "M", "N", "P", "R", "S", "T", 
       "U", "V", "W", "X", "Y", "Z"]; 

$KEYS_LENGTH = count($KEYS); 

$KEYS_INVERSE = array(); 
for ($i = 0; $i < $KEYS_LENGTH; $i++) { 
    $KEYS_INVERSE[$KEYS[$i]] = $i; 
} 

その後、後に、私はこれを行う:

$str = "A21"; // Some random string built with the letters of $KEYS 
$len = strlen($str); 
for($i=0;$i<$len;$i++){ 
    if ($KEYS_INVERSE[$str[$i]] == "undefined") return false; // AN ERROR - This is the problem line 
    else{ 
     // Carry on happily doing stuff 
    } 
} 

すべてが偉大になります。 $ str [$ i]が "A"の場合は問題ありません。 $ str [$ i]が "2"であっても問題ありません。しかし、$ str [$ i]が "1"のとき、それは 'false falseを返します。 $ KEYS_INVERSE [$ str [$ i]] == "undefined"と信じています。

何が問題になりますか?

+0

私にとってうまく動作します:https://3v4l.org/HKauL – Rizier123

+0

これは問題ありませんが、少し古いバージョンのPHPを使用していますが、PHPバージョン5.6と互換性があります。 – Rewind

+0

'' undefined ''はどこから来ましたか? – AbraCadaver

答えて

1

javascriptの背景があるようです。 )

まず、コードの最初のセクションでは、このまで低減することができます。

$KEYS = ["1", "2", "3", "4", "5", "6", "7", "8", "9", 
     "A", "B", "C", "D", "E", "F", "G", "H", "J", 
     "K", "L", "M", "N", "P", "R", "S", "T", 
     "U", "V", "W", "X", "Y", "Z"]; 

$keys_inverse = array_flip($KEYS); // Is it really needed?.. 

しかし、本当にそれで点がございますか?シーケンシャル配列場合は、キーを収集しているので、結果としてこれを取得します:

実際に
[0, 1, 2, 3, 4, 5 ...]; 

はどのシーケンシャル配列は限り要素の数が保存されているように、ここでは同じ結果を返します。

あなたはランダムな文字列が$KEYS配列から文字のみが含まれていることを検証する必要があるので、あなたは$KEYS配列の値を持つ文字列の各文字を比較する必要があります。

$str = 'A21'; 

$strchars = str_split($str); 
// This will create array ['A', '2', '1']; 

if (array_diff($strchars, $KEYS)) { // if $strchars contains values that are not presented in $KEYS array, array_diff function will return those values in form of array, which evaluates to true 
    // The string contains characters that are not presented in the $KEYS array 
} 

この式の理由を1 == "undefined" PHPが1trueと評価し、空でない文字列"undefined"も評価されているため、trueと評価されています。したがって、真は真であり、真です。

+0

はい、あなたは正しいです、私はJavaScriptコードを変換しています。 (私は良いjavascriptプログラマーですが、平均的なPHPプログラマーです。)実際に$ KEYSの配列インデックスを知る必要があるので、私はあなたの解決策を行うことができません。私はKEYSに「O」という文字を持っていません。これらの省略された文字のいずれも切り詰めていないことを確認する必要があります(例:$ KEYS_INVERSE ['O'])。じゃあどうすればいい? – Rewind

+0

答えはあなたが必要とするものです。より明確にするために少し更新しました。 –

関連する問題