¿Hay una manera de ordenar una matriz asociativa por la forma de las teclas se insertan con PHP?

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

  •  13-09-2019
  •  | 
  •  

Pregunta

Este es un ejemplo de lo que quiero decir:

Tengo una matriz:

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

Entonces, bucle a través de él, así:

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

Estoy esperando volver:

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

He intentado usar el tipo () de PHP funciones en vano. El más cercano que se me ocurre es que había necesidad de usar algo como usort (), pero estoy teniendo problemas para averiguar cómo escribir una función que va a hacer lo que quiera.

Cualquier consejo sobre este tema es muy apreciada, y muchas gracias por leer.

¿Fue útil?

Solución

Ya debería estar en ese orden. arrays PHP se clasifican por lo que los elementos estarán en el orden en el que se han insertado.

También es necesario llamar empty() en $value no $key; $key debe ser siempre que no esté vacía. También no es necesario isset(), así como empty(). Aparte de que su código funciona bien y produce la salida deseada.

Me gustaría también tener cuidado con el uso de empty() porque volverá cierto para una cadena '0'. Esto podría ser un valor de parámetro válido que se ignora. En su lugar podría comprobar que strlen($value) > 0.

Otros consejos

Ejecutar el siguiente código a través de comandos interactiva de PHP simplemente afirma comunicado Tom Haigh 's

  

Ya debería estar en ese orden.   arrays PHP se clasifican por lo que los elementos   estará en el orden en que se   ellos insertado.

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

¿Estás seguro de que esto es exactamente el código que está utilizando y no hay nada sucediendo a $input_array entre la creación y bucle?

EDIT:

Sólo una pregunta sencilla y tal vez estúpida: ¿Dónde se comprueba cómo la cadena resultante en $input parece? Si lo hace, por ejemplo, en Navegador HTML de Firebug para los atributos no coincidirá con el orden real en el código HTML como FireBug muestra el árbol DOM generado a partir de la fuente (y la manipulación potencial Javascript) lo que significa que puede cambiar el orden de los atributos a voluntad ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top