0
我需要在一個CSV文件中寫入一個數組,其中不能更改列順序。但是我想將列標題縮小到最多64個字符的長度。爲了使問題更普遍的,我們先來一個簡單的例子:在PHP中,如何重命名數組密鑰而不移動它?
$array = array(
'A te' => 'foo A',
'Q test' => 'foo Q',
'Z test' => 'foo Z',
);
var_dump($array);
給:
array (size=3)
'A te' => string 'foo A' (length=5)
'Q test' => string 'foo Q' (length=5)
'Z test' => string 'foo Z' (length=5)
現在,我要重命名的「Q測試」鍵「Q工商業污水附加費」。如果我做的:
$swap = $array["Q test"];
unset($array["Q test"]);
$array["Q tes"] = $swap;
var_dump($array);
顯示:
array (size=3)
'A te' => string 'foo A' (length=5)
'Z test' => string 'foo Z' (length=5)
'Q tes' => string 'foo Q' (length=5)
列的位置變了,這不是我所期待的。
$keys = array_keys($array);
$values = array_values($array);
$count = count($keys);
for ($i = 0; ($i < $count); $i++)
{
if (mb_strlen($keys[$i]) > 5)
{
$keys[$i] = mb_substr($keys[$i], 0, 5);
}
}
$array = array_combine($keys, $values);
var_dump($array);
輸出:
我使用(這裏,減少鍵5個字符)解決我的問題
array (size=3)
'A te' => string 'foo A' (length=5)
'Q tes' => string 'foo Q' (length=5)
'Z tes' => string 'foo Z' (length=5)
但是這個看上去很的資源,吞噬......我確實需要在我的每一行上執行這樣的代碼,我有10k到100k行。
有沒有簡單的方法來重命名數組鍵而不移動它們?
看一看array_map,結合使用array_keys。但最終,它可能與你自己的解決方案一樣。 – GarethL
爲什麼不直接在輸出時截斷標題,而不是改變數組?你的問題沒有說清楚爲什麼你需要縮短陣列的密鑰(這可能導致重疊密鑰和數據丟失)。 – salathe