2017-01-09 9 views
0

私は現在、PHP(プログラミング初心者)を学んだし、次の基本的な問題の解決策を見つけようとして立ち往生しています...PHP連想配列を使用する

それは適用以下のルールで「爆弾打開」ゲームです

白いケーブルを切断する場合は、白または黒のケーブルを切断できません。 赤いケーブルを切断する場合は、緑色のケーブルを切断する必要があります 黒いケーブルを切断する場合は、白、緑、またはオレンジのケーブルを切断できません オレンジ色のケーブルを切断する場合は、赤または黒のケーブルを切断してください 緑色のものを切り取った場合、オレンジ色または白いものを切り取らなければならない 紫色のケーブルを切断すると、紫色、緑色、オレンジ色または白色のケーブルを切断できません。

入力は次のようになります。

、白、赤、緑、白

そこで、このデータを有効な次のカットを持つ連想配列に配置しました。入力文字列を配列に変換しました。この連想配列を使用して、入力配列の次のワイヤーカットが有効なカットであるかどうかを確認するにはどうすればよいですか?

function bombDefuseValidation($inputString) { 

    $input = $inputString; 

    $inputExplodedArray = explode(", ", $input); 

    //$inputExplodedArray = array('white', 'red', 'green', 'white'); 

    $inputExplodedArrayLength = count($inputExplodedArray); 

    //Valid next cuts 
    $rules = array(
     "white" => "red, green, orange, purple", 
     "red" => "green", 
     "black" => "red, purple, black", 
     "orange" => "red, black", 
     "green" => "orange, white", 
     "purple" => "red, black" 
    ); 

} 

bombDefuseValidation('white, red, green, white'); 

私はそれがない場合は、次の入力(「赤」)は、連想配列の「白」キーの値として存在するかどうかを確認し、そのような「白」などの入力を取る方法が必要次の入力に移動してチェックを続けます。それらがすべて対応するキーの値と一致すると、爆弾は解消されます。もし誰かが、 "腐った"。

ありがとうございました!

+6

代わりに配列を使用できるときに、カンマ区切りリストを使用する理由は何ですか? – Sammitch

+0

明らかに、$ inputStringを順番にチェックするには、それらをループする必要があります。私は関数checkCut($ lastCut、$ thisCut)を定義して、$ rules配列によってカットが許可されているかどうかに基づいてTRUEまたはFALSEを返します。 –

+0

助けを借りてくれてありがとう。 Sammitch ...はい、それは私がそれについて考えたので今より意味があります。ちょうど私はプログラミングには新しく、ばかげていると思います。 –

答えて

1

Array()を使用すると、はるかに簡単になります。

function bombDefuseValidation($inputArray) { 


    $inputExplodedArrayLength = count($inputArray); 

    //Valid next cuts 
    $rules = array(
     "white" => array("red", "green", "orange", "purple"), 
     "red" => array("green"), 
     "black" => array("red", "purple", "black"), 
     "orange" => array("red", "black"), 
     "green" => array("orange", "white"), 
     "purple" => array("red", "black") 
    ); 

    for ($i = 0; $i < $inputExplodedArrayLength-1 ; $i++) { 

    $temp = $rules[$inputArray[$i]]; 
    if(!in_array($inputArray[$i+1], $temp)) { 

     $num = $i + 2; 
     print("Invalid Input no. {$num}"); 
     return -1; 
     } 
    } 

    print("Valid Input"); 
    return 0; 

} 


bombDefuseValidation(Array('white', 'red', 'green', 'white')); 
+0

このソリューションは、forループを変更した後に大きく機能しました。 for($ i = 0; $ i <($ inputExplodedArrayLength-1); $ i ++){} ありがとうございました! –

+0

大変ありがとう@CoreyBushの編集 –