array_flip() 由于值冲突导致数据丢失

问题描述 投票:0回答:2

最奇怪的事情发生在我身上......

我有一个表单,通过 ajax post(使用 jquery 的序列化函数)发送到运行此函数的 php 脚本(为了清楚起见,进行了精简):

            $arr = $_POST;
            unset($arr['command']);
            unset($arr['index']);
            $vals = $arr;
            $keys = $arr;


            $keys = array_flip($keys);

            return 'vals= ' . implode(',',$vals) . '      keys = ' . implode(',',$keys);

我发送的有效字符串看起来像这样......

alt text

这给了我结果...

alt text

现在,当我从“关于”(在标题字段中)中删除“S”时,我得到的数据字符串如下所示: alt text

这给了我这个结果: alt text

“标题”键已完全从等式中删除!

有什么想法会发生什么吗?

php arrays collision array-flip
2个回答
4
投票

在翻转数组时,如果某个值出现多次,则将使用最新的键作为其值,所有其他键将丢失。

示例(来自手册

<?php
$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);
print_r($trans);
?>

输出:

Array
(
    [1] => b
    [2] => c
)

1
投票

array_flip
不仅仅是返回数组键的数组。相反,它将 keyvalue 的映射翻转为 valuekey。当翻转具有重复值的数组时,只会使用最新的键:

如果某个值出现多次,则将使用最新的键作为其值,其他所有键都将丢失。

现在,如果您只想要数组键,请使用

array_keys
代替。

© www.soinside.com 2019 - 2024. All rights reserved.