有没有办法通过如何使用PHP插入键来订购关联数组?

时间:2009-07-14 10:57:25

标签: php sorting associative-array

这是我的意思的一个例子:

我有一个数组:

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()的东西,但是我无法想出如何编写一个能够做我想做的功能。

非常感谢有关此主题的任何建议,非常感谢阅读。

2 个答案:

答案 0 :(得分:2)

它应该已经按顺序排列了。 PHP数组已排序,因此元素将按插入顺序排列。

您还需要在empty()而不是$value上致电$key; $key应始终为非空。您也不需要isset()以及empty()。除此之外,您的代码工作正常并产生所需的输出。

我也会谨慎使用empty()因为它会为字符串'0'返回true。这可能是一个有效的参数值,可以忽略。您可以改为检查strlen($value) > 0

答案 1 :(得分:2)

通过PHP的交互式命令行运行以下代码只是肯定了Tom Haigh的声明

  

它应该已经按顺序排列了。   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中结果字符串的样子?如果您这样做,例如FireBug的HTML导航器属性的顺序与HTML源中的实际顺序不匹配,因为FireBug显示从源生成的DOM树(以及潜在的Javascript操作),这意味着它可以随意重新排序属性...