2011-09-27 61 views
2

我有一些前段時間編寫的大型PHP函數。它們包含一些關聯數組。到目前爲止,我對這些數組沒有任何問題,因爲它們包含字符串和int類型的鍵(如「brown」和118)。問題是,當密鑰都是int時,它們不會被保留,而是被轉換爲0,1等。PHP - 將int int鍵轉換爲字符串?

有什麼辦法可以強制數組保持我給它的密鑰,即使它們都是int嗎?這些功能非常大,需要很長時間才能更改它們。

EDIT

作爲麥克乙直覺,我使用這似乎重新索引陣列分揀功能。我正在使用我在這裏找到的函數:Sort an Array by keys based on another Array?

這是Erin的第一個,但它沒有保留正確的索引。我嘗試了Boombastic編輯的版本,效果很好。

感謝您的所有答案!

+4

我不確定我是否理解。 'array(5 =>'foo')'用整數鍵5和值foo創建一個數組。它不會強制它從0開始。你在做任何分類嗎?這可能會導致PHP重新索引密鑰。看到代碼會有所幫助。 –

回答

1

你也可以通過數組並將所有int轉換爲一個字符串?

foreach($array as $key => $val){ 
    $array[$key] = (string)$val; 
} 

編輯:如果你需要你的鑰匙是整數,那麼只需要確保當你填寫你的$鍵之前添加一個(INT)投陣列。

+0

+1你比我快:) – diEcho

+4

他的鍵是int/string,而不是值。到了他最後的陣容時,它已經變得模糊了。我不明白這可能會有什麼幫助。 –

+0

在Edit:之後也爲此添加了解決方案。最好的辦法是始終確保數據在初始填充課程時在數組中正確設置。 – Kenny

2

我也有類似的問題$array = ['00'=>'x','11'=>'y']被轉換爲整數鍵,丟失'0'數字。

只寫提供一個答案5年後...

的KennyDs答案可以通過簡化,

$array = array_map('strval',$array); 

...但是,作爲MikeB評論,KennyDs答案是錯的,正確的是:

foreach($array as $key => $val) 
    $array[(string) $key] = $val; 

或在(難看)功能的風格,

$array = array_flip(array_map('strval', array_flip($array))); 

(沒有直接的方式,因爲我檢查)。


關於檢查由var_dump()var_export():顯示的字符串作爲數字時解析爲數字(例如'123'123),但是,它不會丟失串的例子(!)。