C'è un modo per ordinare un array associativo da come le chiavi siano inserite con PHP?

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

  •  13-09-2019
  •  | 
  •  

Domanda

Ecco un esempio di ciò che intendo:

Ho un array:

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

Poi, ho scorrere in questo modo:

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

Spero di tornare:

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

Ho provato con funzioni inutilmente sorta di PHP (). La più vicina che posso immaginare è che avevo bisogno di usare qualcosa di simile usort (), ma sto avendo difficoltà a capire come scrivere una funzione che farà quello che voglio.

Qualche consiglio su questo tema è molto apprezzato, e grazie molto per la lettura.

È stato utile?

Soluzione

Si dovrebbe essere già in questo ordine. array PHP sono ordinati in modo gli elementi saranno nell'ordine in cui li si è inserito.

È inoltre necessario chiamare empty() su $value non $key; $key deve sempre essere vuota. Inoltre non c'è bisogno isset() così come empty(). A parte che il codice funziona bene e produce l'output desiderato.

Vorrei anche stare attenti a utilizzare empty() perché restituirà true per una stringa '0'. Questo potrebbe essere un valore di parametro valido che sarebbe ignorato. Si potrebbe invece verificare che strlen($value) > 0.

Altri suggerimenti

L'esecuzione del seguente codice attraverso la riga di comando interattivo di PHP solo afferma dichiarazione s 'Tom Haigh

  

Si dovrebbe essere già in questo ordine.   array PHP sono ordinati in modo gli elementi   sarà nell'ordine in cui si   li inserito.

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

Sei sicuro che questo è esattamente il codice che si sta utilizzando e non c'è nulla di accadendo per $input_array tra creazione e loop?

Modifica

Solo un semplice e forse domanda stupida: Dove si fa a controllare come la stringa risultante in $input assomiglia? Se lo fate a esempio di Firebug navigatore HTML ordine degli attributi non corrisponderà l'ordine vero e proprio nel codice HTML come Firebug mostra l'albero del DOM generato dalla sorgente (e il potenziale di manipolazione Javascript), che significa che può riordinare gli attributi a volontà ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top