Есть ли способ упорядочить ассоциативный массив по тому, как ключи вставляются с помощью PHP?

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

  •  13-09-2019
  •  | 
  •  

Вопрос

Вот пример того, что я имею в виду:

У меня есть массив:

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

Затем я прокручиваю это в цикле следующим образом:

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

Я надеюсь вернуться:

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

Я пытался использовать функции PHP sort (), но безрезультатно.Ближайшее, что я могу предположить, это то, что мне нужно было бы использовать что-то вроде usort (), но у меня возникли проблемы с тем, чтобы понять, как написать функцию, которая будет делать то, что я хочу.

Мы высоко ценим любые советы по этой теме и большое спасибо за прочтение.

Это было полезно?

Решение

Это уже должно быть в таком порядке.Массивы PHP отсортированы таким образом, что элементы будут располагаться в том порядке, в котором вы их вставили.

Вам также нужно позвонить empty() на $value не $key; $key всегда должно быть непустым.Вам также не нужно isset() а также , как empty().Кроме того, ваш код работает нормально и выдает желаемый результат.

Я бы также с осторожностью относился к использованию empty() потому что это вернет true для строки '0'.Это может быть допустимое значение параметра, которое будет проигнорировано.Вы могли бы вместо этого проверить, что strlen($value) > 0.

Другие советы

Запуск следующего кода через интерактивную командную строку PHP просто подтверждает Том Хейгзаявление пользователя

Это уже должно быть в таком порядке.Массивы PHP отсортированы таким образом, что элементы будут располагаться в том порядке, в котором вы их вставили.

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

Вы уверены, что это именно тот код, который вы используете, и в нем ничего нет происходящее Для $input_array между созданием и циклированием?

Редактировать:

Просто простой и, возможно, глупый вопрос:Где вы проверяете, как результирующая строка в $input как выглядит?Если вы сделаете это, например, вHTML-навигатор FireBug порядок атрибутов не будет соответствовать реальному порядку в исходном HTML-коде, поскольку FireBug отображает DOM-дерево, сгенерированное из исходного кода (и возможные манипуляции с Javascript), что означает, что он может изменять порядок атрибутов по желанию...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top