有没有办法通过 PHP 插入键的方式来排序关联数组?

发布于 2024-07-27 02:55:29 字数 777 浏览 3 评论 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() 这样的东西,但我无法弄清楚如何编写一个可以完成我想要的功能的函数。

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

Here's an example of what I mean:

I have an array:

array('type'=>'text', 
      'class'=>'input', 
      'name'=>'username', 
      'id'=>'username', 
      'value'=>'', 
      'size'=>'30', 
      'rows'=>'',
    'cols'=>'');

Then, I loop through it like so:

$input = '<input ';
    foreach($input_array as $key => $value) {
        if(isset($key) && !empty($key)) {
            $input .= $key . '="' . $value . '" ';
        }   
    }   
$input .= '/>';

I'm hoping to return:

<input type="text" class="input" name="username" id="username" size="30" />

I've tried using PHP's sort() functions to no avail. The nearest I can figure is I'd need to use something like usort(), but I'm having trouble figuring how to write a function which will do what I want.

Any advice on this topic is greatly appreciated, and thanks very much for reading.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晨光如昨 2024-08-03 02:55:29

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

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

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

It should already be in that order. PHP arrays are sorted so the elements will be in the order in which you inserted them.

You also need to call empty() on $value not $key; $key should always be non-empty. You also don't need isset() as well as empty(). Apart from that your code works fine and produces the desired output.

I would also be wary of using empty() because it will return true for a string '0'. This could be a valid parameter value which would be ignored. You could instead check that strlen($value) > 0.

倾听心声的旋律 2024-08-03 02:55:29

通过 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 操作),这意味着它可以随意重新排序属性...

Running the following code through PHP's interactive commandline just affirms Tom Haigh's statement

It should already be in that order.
PHP arrays are sorted so the elements
will be in the order in which you
inserted them.

<?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 =>
*/

You're sure that this is exactly the code you're using and there is nothing happening to $input_array between creation and looping?

EDIT:

Just a simple and perhaps stupid question: Where do you check how the resulting string in $input looks like? If you do so in e.g. FireBug's HTML navigator the attributes' order won't match the real order in the HTML source as FireBug displays the DOM tree generated from the source (and potential Javascript manipulation) which means that it can reorder the attributes at will...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文