Est-il possible de commander un tableau associatif par la façon dont les clés sont insérés avec PHP?

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

  •  13-09-2019
  •  | 
  •  

Question

Voici un exemple de ce que je veux dire:

J'ai un tableau:

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

Alors, je boucle à travers elle comme ceci:

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

J'espère revenir:

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

Je l'ai essayé d'utiliser des fonctions de tri () de PHP en vain. Le plus proche que je peux comprendre est que je aurais besoin d'utiliser quelque chose comme usort (), mais je vais avoir du mal à comprendre comment écrire une fonction qui fera ce que je veux.

Tous les conseils sur ce sujet est très apprécié, et merci beaucoup pour la lecture.

Était-ce utile?

La solution

Il devrait déjà être dans cet ordre. tableaux PHP sont classés de sorte que les éléments seront dans l'ordre dans lequel vous les insérer.

Vous devez également appeler empty() sur $value pas $key; $key doit toujours être vide. Vous pouvez aussi ne pas besoin isset() ainsi que empty(). Mis à part que votre code fonctionne bien et produit la sortie désirée.

Je voudrais également se méfier de l'utilisation empty() parce qu'il retourne vrai pour une chaîne « 0 ». Cela pourrait être une valeur de paramètre valide qui serait ignoré. Vous pouvez vérifier que la place strlen($value) > 0.

Autres conseils

L'exécution du code ci-dessous par commandline interactif de PHP affirme que déclaration de Tom Haigh

  

Il devrait déjà être dans cet ordre.   tableaux PHP sont triés de sorte que les éléments   sera dans l'ordre dans lequel vous   les insérer.

<?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 =>
*/

Vous êtes sûr que ce soit exactement le code que vous utilisez et il n'y a rien passe $input_array entre la création et le bouclage?

EDIT:

Juste une question simple et peut-être stupide: Où pouvez-vous vérifier comment la chaîne résultante à $input ressemble? Si vous le faites en exemple Le navigateur HTML Firebug l'ordre des attributs ne correspondra pas à l'ordre réel dans la source HTML comme Firebug affiche l'arborescence DOM généré à partir de la source (et le potentiel de manipulation Javascript) ce qui signifie qu'il peut réordonner les attributs à volonté ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top