2016-08-30 22 views
1

我的問題是,下拉菜單實際上是正確填充的,但只有該特定行的第一個字母。PHP在下拉菜單中顯示數組的第一個字母?

我在文件中的以下內容:

週一

週二

週三

它是作爲顯示:

中號

牛逼

W

任何想法?

我的代碼:

<select id="playlist_wrongstyle" class="form-control" style="visibility:visible; width:250px;"> 
<option selected="selected">Choose one</option> 
<?php 
    $returnedScheduleNamesArray = explode ("\n", file_get_contents('/srv/http/schedulenames')); 

    array_pop($returnedScheduleNamesArray); //remove empty last line 

    foreach($returnedScheduleNamesArray as $name) 
    { 
?> 
     <option value="<?=$name['name']?>"><?=$name['name']?></option> 
<?php 
    } 
?> 
</select> 
+4

試試看:'' –

+0

'$ name'是一個字符串嗎? – jeroen

+0

@MagnusEriksson完美!感謝百萬:) – irishwill200

回答

5

$name是一個字符串。你應該只回聲名稱:<?= $name >

你看到一個字母的原因:

$name = 'Monday'; 
$name[0] === 'M'; // true 
  • PHP是強迫你的字符串:

    • 字符串中的字符可以使用數組括號語法訪問'name'爲一個整數,並且這個評估結果爲0

      (int)'name' === 0; // true 
      
    • 所以,$name['any string'] === $name[0]; // true

  • 3

    哎呀,你已經找到了PHP魔術。 PRESTO!字符串是數組!

      $name ='Bob';// thats a string 
         echo $name['0']; // prints B, like an array 
         echo $name['1']; // prints o, like an array 
    

    字符串變量實際上是陣列,但在你的情況,你不希望出現這種情況..所以

    <option value="<?=$name?>"><?=$name?></option> 
    
    +2

    這將打印「o」 - 字符串是零索引就像數組。 – iainn

    +1

    不是一個真正的魔術技巧,當然也不是PHP獨有的:P – CD001

    +0

    當我在2000年的時候意外地發現它時,它是神奇的,我會測試但我認爲它們是零指數,例如; $ name ['0']是整個字符串,1是第一個字符......無論如何,仍然是魔法,只是不起眼的魔法:p –

    4

    這基本上是發生了什麼事與$name['name']

    foreach (['Monday', 'Tuesday'] as $name) { 
        echo $name['nonexistent']; 
    } 
    

    如果你調整你的錯誤報告水平,你會看到

    警告:非法串偏移「不存在」

    當PHP看到你之後的字符串使用['something'],它認爲你想在它訪問一個特定的字符(你可以,但只有數字索引)。但是,由於PHP期望在那裏有一個整數,當你引用一個非法字符串偏移量時,它會被轉換爲一個整數,所以你會得到可能得到索引零,第一個字母,除非你的非法字符串偏移量開始的東西,將轉換非零。 (例如$day['3illegal']讓你「d」和「s」)。

    +1

    實際上,你得到索引'0'是因爲'(int)'一些字符串'評估爲'0' – Stephen

    +1

    這不僅僅是因爲PHP愛我們? ;) –

    +0

    我想這兩者都有點兒。 :) – Stephen

    相關問題