gpt4 book ai didi

javascript - 在 PHP 中按整数键对对象进行排序

转载 作者:可可西里 更新时间:2023-10-31 23:17:06 25 4
gpt4 key购买 nike

我有一个数组,其中 ID 作为键,名称来自与其关联的数据库。我使用它从 PHP 获取统计数据,以输出到用 JavaScript(通过 JSON)生成的 Google Chart。在 PHP 中,我有以下数组:

$a = [ 
'33' => 'first',
'25' => 'second',
'14' => 'last
];

如果我运行以下代码:

foreach( $a as $key => $val )
echo "$key => $val" . PHP_EOL;

我得到以下(预期的)结果

   33 => first
25 => second
14 => last

我使用 AJAX 和 JSON 将它发送到 JavaScript 环境,在这里它变成了一个对象。现在,当我运行以下 JavaScript 时:

for( var i in a )
console.log( i + " => " + a[i] );

我明白了

   14 => last
25 => second
33 => first

所以我的键被解释为整数并在 JavaScript 中排序,在这种情况下,这意味着我发送到 Google Chart 的包含统计信息的数组与错误的标签匹配。

我通过在从数据库中读取统计信息之前在 PHP 中对数组进行排序来解决这个问题。我需要键保持不变,这是我在 PHP 中所做的:

 $tmp = array_flip( $a );
asort( $tmp );
$a = array_flip( $tmp );

这给了我这样的 PHP 数组:

[
'14' => 'last',
'25' => 'second',
'33' => 'first'
]

所以现在 PHP 中的 foreach 将与 JavaScript 中的 for( i in ...) 具有相同的顺序。我想知道是否有更好的方法在 PHP 中对我的数组进行排序而不是翻转它两次 - 或者 - 如果 JavaScript 中的循环选项不对我的数组的(公认的混淆)整数值键进行排序?

最佳答案

你试过了吗ksort

ksort

(PHP 4, PHP 5, PHP 7) ksort — Sort an array by key

Description

bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) Sorts an array by key, maintaining key to data correlations. This is useful mainly for associative arrays.

如果它不能很好地处理数字字符串键,您可以使用 uksort并用 parseInt 编写你的比较函数和 spaceship operator ( <=> ) .


但是,如果您只想完全停止重新排序,虽然您不能通过对象的键停止对象的“排序”(请注意,它不是标准的并且依赖于浏览器:并非所有这些将对其进行排序),您始终可以在数组中使用对,以避免更改元素的原始顺序(在本例中为对):

$a = [
['33', 'first'],
['25', 'second'],
['14', 'last']
];

关于javascript - 在 PHP 中按整数键对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com