2010-09-15 37 views
1

最奇怪的是發生在我身上......PHP array_flip()錯誤?

我有我通過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); 

我送,讓我得到的結果String的作品看起來像這樣...

alt text

...

alt text

現在,當我從「關於」(標題字段)刪除了「S」我得到的,看起來像這樣的數據串: alt text

這給了我這樣的結果: alt text

「標題」鍵已經完全脫離了等式!

任何想法可能發生什麼?

回答

4

如果某個值出現多次時翻轉數組,則最新的鍵將用作其值,其他所有鍵都將丟失。

(從manual

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

輸出的一個例子:

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

你真了不起。謝謝。 – 2010-09-15 18:38:13

+2

在不相關的註釋中,如果需要將所有數組鍵作爲值,PHP還具有array_keys()函數。 – 2010-09-15 18:42:10

1

array_flip不僅僅是返回數組鍵陣列。相反,它翻轉了密鑰的值的映射值密鑰。而當有重複值的數組被翻轉,只有最新的密鑰將用於:

如果值有幾個事件,最新的密鑰將被用來作爲自己的價值觀,和所有其他都將丟失。

現在,如果您只是想要數組密鑰,請改用array_keys

+0

我給出了一個贊成,指出array_keys ... coaddict首先回答我的問題,所以我不得不給他複選標記,但謝謝。 – 2010-09-15 18:50:08