2016-08-30 6 views
1

Mein Problem ist, dass die Dropdown-Liste tatsächlich korrekt ausgefüllt wird, aber nur mit dem ersten Buchstaben dieser bestimmten Zeile.PHP zeigt ersten Buchstaben des Arrays in Dropdown?

Ich habe folgendes in meiner Datei:

Montag

Dienstag

Mi

Es ist die Anzeige als:

M

T

W

Irgendwelche Ideen?

Mein Code:

<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

Versuchen Sie einfach: '' –

+0

'$ name' ist eine Zeichenfolge? – jeroen

+0

@MagnusEriksson Perfekt! Tausend Dank :) – irishwill200

Antwort

5

$name ist eine Zeichenfolge. Sie sollten nur Echo Name: <?= $name >

Der Grund, warum Sie einen einzelnen Buchstaben sehen:

$name = 'Monday'; 
$name[0] === 'M'; // true 
  • PHP Nötigung Ihre string:

    • String Zeichen lassen sich mit Array Klammer-Syntax zugegriffen werden 'name' in eine ganze Zahl, und dies ergibt 0:

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

  • 3

    Ooops, haben Sie den PHP-magischen Trick gefunden. PRESTO! Strings sind Arrays!

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

    Strings Variablen sind eigentlich Arrays, aber in Ihrem Fall, Sie tun das nicht .. wollen so

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

    Das wird "o" drucken - Strings sind null-indiziert wie Arrays. – iainn

    +1

    Nicht wirklich ein Zaubertrick und sicherlich nicht einzigartig für PHP: P – CD001

    +0

    Nun, es war Magie, als ich es versehentlich im Jahr 2000 sumthin entdeckte, und ich werde testen, aber ich dachte, sie waren Null-Index, zB; $ name ['0'] war die ganze Saite, 1 war der erste Char. Wie auch immer, immer noch Magie, nur unscheinbare Magie: p –

    4

    Dies ist im Grunde, was mit $name['name'] geschieht:

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

    Wenn Sie passen Ihre Fehlermeldungsstufe an. Sie sehen

    Warning: Illegal String Offset ‚nicht existent‘

    Wenn PHP Sie verwenden ['something'] nach einer Reihe sieht, es denkt, dass Sie versuchen, ein bestimmtes Zeichen in ihm den Zugriff auf (die Sie können tun, sondern nur mit numerischen Indizes).Aber da PHP dort eine Ganzzahl erwartet, wird beim Verweisen auf einen ungültigen Zeichenfolgenversatz diese in eine Ganzzahl konvertiert, so dass Sie wahrscheinlich erhalten, wenn der ungültige Zeichenfolgenoffset mit etwas beginnt, das konvertiert wird zu ungleich Null. (z. B. $day['3illegal'] bekommt Sie "d" und "s".)

    +1

    Tatsächlich erhalten Sie Index '0', weil' (int) 'einige Zeichenfolge' zu 0 '0' bewertet – Stephen

    +1

    Es ist nicht nur, weil PHP uns liebt? ;) –

    +0

    Ich denke, es ist ein bisschen von beidem. :) – Stephen

    Verwandte Themen