C'è un modo per ordinare un array associativo da come le chiavi siano inserite con PHP?
-
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.
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à ...