kostenloser Webspace werbefrei: lima-city


Array zu DropDown mit Spalten ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    erlebnis

    erlebnis hat kostenlosen Webspace.

    Hallo

    wie kann ich ein DropDown Formular machen,
    bei dem im angezeigten Text einzelner <option> Elemente
    nicht nur einfacher Text, sondern als Spalten (2 Werte) agezeigt werden.

    Beispiel Daten:
    $daten = array(
        'a' => array ( 'Text1', '14' ),
        'b' => array ( 'Text2 blablabla', '257' ),
        'c' => array ( 'Text3', '74' ),
        'd' => array ( 'Text4 Bezeichnung', '361' ),
    );


    Ausgabe Daten:
    echo "  <select name=\"auswahl\">\n"; 
    
    $abstand = '&nbsp;&nbsp;&nbsp;'; 
    
    foreach($daten as $key=>$val) { 
    echo "      <option value=\"".$key."\"> ".$val[0]." ".$abstand." ".$val[1]." </option>\n"; 
    }
    
    echo "  </select>\n";



    damit es - ähnlich wie bei Tabelle - Spalten / gleichbleibende Abstände hat

    INFO: habe die
    &nbsp;
    durch einfache Leerzeichen ersetzt,
    damit man den Unterschied auch "sehen" kann ...

    und ... der $key kann auch unterschiedliche Zeichen-Anzahl haben
    hier zur Vereinfachung mal nur mit a,b,c,d (damit das Problem "optisch" besser darstellbar ist)

    ... nicht so:
    <select name="auswahl">
          <option value="a"> Text1    14 </option>
          <option value="b"> Text2 blablabla    257 </option>
          <option value="c"> Text3    74 </option>
          <option value="d"> Text4 Bezeichniúng    361 </option>
      </select>


    ... sondern so:
    <select name="auswahl">
          <option value="a"> Text1               14 </option>
          <option value="b"> Text2 blablabla     257 </option>
          <option value="c"> Text3               74 </option>
          <option value="d"> Text4 Bezeichnung   361 </option>
      </select>


    also quasie mit Spalten ... geht sowas?

    es geht nicht um Abstände im Quellcode, sondern um Ausgabe (Anzeige im Browser)

    klar ist:
    Wenn ich es mit Leerzeichen machen würde, dann muss ich, damit das angezeigt wird,
    anstatt einfache Leerzeichen ja "geschützes Leerzeichen"
    &nbsp;
    verwenden.

    aber wie bekomme ich je Element die passende Anzahl Leerzeichen,
    ... oder gibt es eine andere (bessere) Möglichkeit, den <option> Text mit Spalten auszugeben ?
    evtl. mit CSS?




    Beitrag zuletzt geändert: 2.10.2012 12:58:52 von erlebnis
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Kein Codebeispiel, aber ein Denkanstoss:
    Zuerst findest du heraus welche Zeile die Längste ist und speicherst dir diese Länge.
    Per str_pad bringst du dann alle anderen Zeilen auf die gleiche Länge.
    Abschließend kannst du dann vorgehen wie gehabt:
    $val[0].$abstand.$val[1]


    mfg
  4. Autor dieses Themas

    erlebnis

    erlebnis hat kostenlosen Webspace.

    ok, Danke

    habe es mit str_pad() ausprobiert
    und gemerkt, nur maximale Länge genügt nicht, ich brauche den Unterschied zur maximalen Länge
    um den $abstand entsprechende Zeichen zu-zuweisen. ... siehe: $xinsert unten



    ... aber hat nicht ganz funktioniert,
    weil ja auch noch die einzelnen Zeichen unterschiedliche Breite haben

    ... erst wenn ich CSS für die DropDown-Box mache:
    select { font-family: "Courier New", Courier, mono; }

    dann klappt es auch :) ...

    hier nocmal der ganze (test) Code:

    <?php
    // -------------------------------------------------------------------- 
    
    $daten = array(
        'a' => array ( 'Text1', '14' ),
        'b' => array ( 'Text2 blablabla', '257' ),
        'c' => array ( 'Text3', '74' ),
        'd' => array ( 'Text4 Bezeichnung', '361' ),
    );
    
    
    
    $maxlen = 0;
    foreach($daten as $val) {
      $val_len = strlen($val[0]);
      if ($val_len > $maxlen) { $maxlen = $val_len;   }
    }
    
    
    $maxlen = ($maxlen+2);  // ---- plus mindest-Abstand von 2 Leerzeichen --- 
    
    $select_style = 'font-family: Courier, mono;'; 
    
    
    echo "  <select name=\"auswahl\" style=\"".$select_style."\">\n";
    
    foreach($daten as $key=>$val) { 
    
    $abstand = ' ';
    $val_len = strlen($val[0]);
    $xinsert = ($maxlen - $val_len);  // ---- fehlende Zeichen bis $maxlen ---- 
    
    // ----- str_pad() mit einfachem Leerzeichen, weil &nbsp; mehrere Zeichen hat -----
    $abstand = str_pad($abstand, $xinsert, ' ', STR_PAD_LEFT);
    
    // ---- dann die einfachen Leerzeichen zu &nbsp; umwandeln ----
    $abstand = str_replace(' ', '&nbsp;', $abstand);
    
    echo "      <option value=\"".$key."\"> ".$val[0]." ".$abstand." ".$val[1]." </option>\n";
    
    }
    
    
    echo "  </select>\n";
    
    
    
    // ----------------------------------------------------------------- 
    ?>


    Ergebnis: (passt)
    <select name="auswahl" style="font-family: Courier, mono;">
          <option value="a"> Text1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14 </option>
          <option value="b"> Text2 blablabla &nbsp;&nbsp;&nbsp;&nbsp; 257 </option>
          <option value="c"> Text3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 74 </option>
          <option value="d"> Text4 Bezeichnung &nbsp;&nbsp; 361 </option>
      </select>

    ohne das festlegen der Schriftart auf mono-space (mit CSS) gehts nicht,
    weil sonst ja unterschiedliche Zeichen verschiedene Breite haben

    ... aber gibt es da keine andere Möglichkeit, so ein Dropdown mit Spalten im Text zu formatieren ?



    Beitrag zuletzt geändert: 2.10.2012 13:02:11 von erlebnis
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!