有没有办法通过 PHP 插入键的方式来排序关联数组?
这是我的意思的一个例子:
我有一个数组:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它应该已经按照这个顺序了。 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 needisset()
as well asempty()
. 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 thatstrlen($value) > 0
.通过 PHP 的交互式命令行运行以下代码只是确认 Tom Haigh 的声明
您确定这正是您正在使用的代码,并且在创建和循环之间
$input_array
没有发生任何事情?编辑:
只是一个简单且可能愚蠢的问题:您在哪里检查
$input
中的结果字符串是什么样子? 如果您在 FireBug 的 HTML 导航器中这样做,则属性的顺序将与 HTML 源中的实际顺序不匹配,因为 FireBug 显示从源生成的 DOM 树(以及潜在的 Javascript 操作),这意味着它可以随意重新排序属性...Running the following code through PHP's interactive commandline just affirms Tom Haigh's statement
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...