0

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

我有一个数组:

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() 的东西,但我无法弄清楚如何编写一个函数来做我想做的事情。

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

4

2 回答 2

2

它应该已经是这个顺序了。PHP 数组已排序,因此元素将按照您插入它们的顺序排列。

您还需要empty()调用$valuenot $key$key应始终为非空。您也不isset()需要empty(). 除此之外,您的代码可以正常工作并产生所需的输出。

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

于 2009-07-14T10:59:44.470 回答
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 操作),这意味着它可以随意重新排序属性...

于 2009-07-14T11:25:35.557 回答