Gibt es eine Möglichkeit eines Assoziativ-Array zu bestellen, indem, wie die Tasten sind mit PHP eingefügt?

StackOverflow https://stackoverflow.com/questions/1124679

  •  13-09-2019
  •  | 
  •  

Frage

Hier ist ein Beispiel dafür, was ich meine:

Ich habe ein Array:

array('type'=>'text', 
      'class'=>'input', 
      'name'=>'username', 
      'id'=>'username', 
      'value'=>'', 
      'size'=>'30', 
      'rows'=>'',
    'cols'=>'');

Dann habe ich Schleife durch sie etwa so:

$input = '<input ';
    foreach($input_array as $key => $value) {
        if(isset($key) && !empty($key)) {
            $input .= $key . '="' . $value . '" ';
        }   
    }   
$input .= '/>';

Ich hoffe, zurück:

<input type="text" class="input" name="username" id="username" size="30" />

Ich habe versucht, PHP sort () Funktionen ohne Erfolg verwenden. Die nächst ich herausfinden kann, die ich brauchen würde, so etwas wie usort () verwenden, aber ich habe Probleme, herauszufinden, wie man eine Funktion zu schreiben, die das tun, was ich will.

Jede Beratung zu diesem Thema wird sehr geschätzt, und vielen Dank für das Lesen.

War es hilfreich?

Lösung

Es sollte bereits in dieser Reihenfolge sein. PHP Arrays sortiert werden, so dass die Elemente in der Reihenfolge sein, in der sie eingesetzt wird.

Sie müssen auch empty() auf $value rufen nicht $key; $key sollte immer sein, nicht leer. Sie brauchen auch nicht isset() sowie empty(). Abgesehen davon, dass Ihr Code funktioniert gut und erzeugt die gewünschte Ausgabe.

Ich wäre auch vorsichtig empty() verwenden, weil es für eine Zeichenfolge true zurückgeben wird ‚0‘. Dies könnte ein gültiger Parameterwert sein, die ignoriert werden würden. Sie könnten stattdessen, dass strlen($value) > 0 überprüfen.

Andere Tipps

Ausführen des folgenden Code durch interaktive Kommandozeile PHP nur bestätigt, Tom Haigh 's Aussage

  

Es sollte bereits in dieser Reihenfolge sein.   PHP-Arrays so sind die Elemente geordnet   wird in der Reihenfolge, in der Sie   eingefügt sie.

<?php
$a = array(
    'type'=>'text',
    'class'=>'input',
    'name'=>'username',
    'id'=>'username',
    'value'=>'',
    'size'=>'30',
    'rows'=>'',
    'cols'=>''
);
print_r($a);
/* 
Array
(
    [type] => text
    [class] => input
    [name] => username
    [id] => username
    [value] =>
    [size] => 30
    [rows] =>
    [cols] =>
) 
*/
foreach ($a as $k => $v) {
    echo $k . ' => ' . $v . "\n";
}
/* 
type => text
class => input
name => username
id => username
value =>
size => 30
rows =>
cols =>
*/

Sind Sie sicher, dass dies genau der Code, den Sie verwenden, und es gibt nichts passiert $input_array zwischen Schöpfung und Looping?

EDIT:

Nur eine einfache und vielleicht blöde Frage: Wo können Sie überprüfen, wie die resultierende Zeichenfolge in $input aussieht? Wenn Sie dies tun, in z.B. Firebug HTML-Navigator der Ordnung Attribute nicht die wirkliche Ordnung in der HTML-Quelle übereinstimmen, wie FireBug den DOM-Baum von der Quelle erzeugt zeigt (und potentielle Javascript Manipulation), was bedeutet, dass sie die Attribute nach Belieben neu anordnen können ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top