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

我有一个数组:

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()的,因为它会返回一个字符串真“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 好像?如果你这样做,例如FireBug 的 HTML 导航器属性的顺序与 HTML 源中的实际顺序不匹配,因为 FireBug 显示从源生成的 DOM 树(以及潜在的 Javascript 操作),这意味着它可以随意重新排序属性...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top