PHP array_flip()Bug?

时间:2010-09-15 18:31:01

标签: php arrays

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

我有一个表单,我通过一个ajax帖子(使用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

“标题”键已完全脱离等式!

任何想法会发生什么?

2 个答案:

答案 0 :(得分:4)

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

一个例子(来自manual

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

输出:

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

答案 1 :(得分:1)

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

  

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

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