这是我的意思的一个例子:
我有一个数组:
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()的东西,但是我无法想出如何编写一个能够做我想做的功能。
非常感谢有关此主题的任何建议,非常感谢阅读。
答案 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操作),这意味着它可以随意重新排序属性...