Есть ли способ упорядочить ассоциативный массив по тому, как ключи вставляются с помощью PHP?
-
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), что означает, что он может изменять порядок атрибутов по желанию...