gpt4 book ai didi

php - 为什么 array_unique 将整数键更改为字符串键?

转载 作者:行者123 更新时间:2023-12-04 12:48:22 27 4
gpt4 key购买 nike

我有以下代码:

$myAwesomeArray = array(
'value1',
'value2',
'value3',
'value3',
'value4',
'value4'
);

$z = json_encode(array('all' => $myAwesomeArray));
var_dump('before', $z);

$myAwesomeArray = array_unique($myAwesomeArray);

$z = json_encode(array('all' => $myAwesomeArray));
var_dump('after', $z);

所以有一个由整数键隐式索引的数组,其中包含一些重复值。具有重复值很重要,否则将不会发生下面描述的行为。

如您所见,我将数组和通过 array_unique() 函数传递它的结果都转换为 JSON。

我希望看到的输出是这样的:

string(6) "before"
string(63) "{"all":["value1","value2","value3","value3","value4","value4"]}"
string(5) "after"
string(45) "{"all":["value1","value2","value3","value4"]}"

但是我看到的是:

string(6) "before"
string(63) "{"all":["value1","value2","value3","value3","value4","value4"]}"
string(5) "after"
string(61) "{"all":{"0":"value1","1":"value2","2":"value3","4":"value4"}}"

显然该函数确实确实删除了重复值,但它将键从整数更改为字符串,至少 json_encode() 看到的是这样。

另一个奇怪的行为是,如果在通过 array_unique() 传递数组后,我这样做:

var_dump(array_keys($myAwesomeArray));

然后打印在输出中用 int 类型标记:

array(4) {
[0]=> int(0)
[1]=> int(1)
[2]=> int(2)
[3]=> int(4)
}

这与 json_encode() 的输出不匹配。


我阅读了我能找到的关于 array_unique() 的所有内容,但无法弄清楚为什么会这样。

我在 Windows 7 机器上使用 PHP 5.3 和 PHP 5.6 测试了上面的代码,在行为/输出上没有差异。

这是一个错误吗?我应该这样报告吗?还是这是正常行为?

最佳答案

当您使用 array_unique 时,键将保留,结果数组不会重新索引。

这在 php 中没有问题,但在 javascript 中,根据定义,数组具有 0 索引的顺序键。

因此,当您生成 json 时,php 会识别出这些键不是有效的 javascript 数组键,并将您的数组转换为一个对象。这是正确的。

如果你想要你的“预期”结果,你需要重新索引你的数组:

$z = json_encode(array('all' => array_values($myAwesomeArray)));
^^^^^^^^^^^^ generate a new array with just the values

关于php - 为什么 array_unique 将整数键更改为字符串键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42293299/

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