promotion image of download ymail app
Promoted

請問PHP裡二維陣列的取值問題

我是PHP的初學者。

最近正試著寫一個超簡易的中英字典,

讓使用者輸入英文單字,送出後顯示中文意思,與是否在字典中。

所以第一個頁面很簡單:

<form method="POST" action="output.php">

<p>請輸入英文單字:<input type="text" name="vocab"></p>

<input type="submit" value="送出查詢">

</form>

第二個頁面(output.php)

字彙用二維陣列表示如下:

(其實大可以用一維陣列,簡單多了,但是突然想挑戰一下如何取二維陣列的值。我還沒學到資料庫啊…)

$words=array(

'a'=>array('apple'=>'蘋果' , 'average'=>'平均'),

'b'=>array('banana'=>'香蕉' , 'barb'=>'倒鉤'),

'g'=>array('grapes'=>'葡萄' , 'gold'=>'黃金'),

'o'=>array('orange'=>'橘子' , 'olive'=>'橄欖'),

'w'=>array('watermelon'=>'西瓜' , 'weather'=>'天氣'),

's'=>array('strawberry'=>'草莓' , 'snake'=>'蛇'),

'p'=>array('pineapple'=>'鳳梨' , 'peach'=>'水蜜桃')

);

原本我是要用雙層的foreach來存取,

例如

foreach($words as $vindex)

{

foreach($vindex as $cvocab)

{

if($_POST['vocab'] == $vindex)

{

echo '<table border="1"><tr><td>英文</td><td>中文</td></tr>

<tr><td>' . $_POST['vocab'] . '</td><td>' . $cvocab . '</td></tr></table>';

}

……

後面就寫不下去了。

因為我不曉得如何取出二維陣列中第二維的「索引值」(不是陣列裡的內容)

也就是裡面if判斷式裡,$_POST['vocab']好像不能和$vindex比對…

不曉得各位先進還有什麼其他方法嗎?

3 個解答

評分
  • 7 年前
    最佳解答

    請看這邊~

    foreach($words as $vindex)

    {

    foreach($vindex as $key=>$cvocab)//這邊的$key就是索引,

    {

    if($_POST['vocab'] == $key)//所以就拿來比對

    {

    echo $cvocab;

    }

    }

    }

    也就是裡面if判斷式裡,$_POST['vocab']好像不能和$vindex比對…

    foreach($words as $vindex)

    就是把$words陣列放到foreach迴圈,然後值用$vindex印出來

    ,所以你的寫法的意思是:用$_POST['vocab'] 跟陣列比對,

    這樣當然比對不出來

    • Commenter avatar登入以對解答發表意見
  • 7 年前

    這麼麻煩....

    個人幾乎很少很少用二維陣列。

    建議你,用 txt 存檔。

    2個文字文件,當作是 字典檔案。一個字典是 英文單字,另一個 是中文。

    到時候再用 file 函數去讀就可以了。

    至於要查詢存不存在 ,用 PHP的搜尋指令。

    至於要得到第幾行,就 先用 substr 切割字串 到 搜尋文字的長度。

    後段 丟掉 留前段,迴圈 搜尋 "換行符" 出現次數,每回圈一次 刪除一次換行符,

    最後得出 行數。

    • Commenter avatar登入以對解答發表意見
  • 7 年前

    http://www.verycd.com/topics/2883898/ 這個教學非常詳盡易懂,免費,下載看完就行了。

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。