Javascript 正在对数组的一部分进行排序



我试图找到一些关于我的问题,但我还没有找到任何东西。

我有一个 php 数组按照我想要的方式排序,但是当我尝试用 javascript 显示它时,顺序被改变了,不是全部,而只是数字。 这个例子被简化以简化问题,但我需要这个结构,甚至里面有更多的数组。

这是代码:

<?php
// array ordered as i need
$data = array(
"first" => array(
"test3" => array(),
"test1" => array(),
"test2" => array(),
"30" => array(),
"31" => array(),
"35" => array(),
),
"segond" => array(
"test1" => array(),
"test2" => array(),
),
);
?>
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
var data = <?php echo json_encode($data); ?>;
$(document).on('click', 'input[type=button][name=test]', function() {
var fields = Object.keys(data['first']);
for(i=0; i<fields.length; i++) {
$('body').append('<p>'+fields[i]+'</p>');
}
});
</script>
</head>
<body>
<input type="button" name="test" value="Test me">
</body>
</html>

结果如下:

30
31
35
test3
test1
test2

数字是有序的,但字符串不是! 我需要将键作为值访问,因为它们是我要显示的名称。 我的猜测是,当我获得键时,它们会在新数组中排序,但我尝试了几件事来维持我的顺序,但 javascript 总是以不同的方式对数组进行排序。

你可以帮我吗?谢谢:)

正如一个名字好听的人已经通过评论告诉你的那样,JS不理解"关联数组",也没有这些键的顺序概念。这就是为什么你必须使用从一开始就(在 PHP 中(按你想要排序的数组,然后对其进行编码以用于 JS。

<?php
// array ordered as i need
$data = array(
"first" => array(
"test3" => array(),
"test1" => array(),
"test2" => array(),
"30" => array(),
"31" => array(),
"35" => array(),
),
"segond" => array(
"test1" => array(),
"test2" => array(),
),
);
// Use this in JSON encode
$keys_used_in_js = array_keys($data['first']);
?>

最新更新