列の順序を変更してはならない CSV ファイルに配列を書き込む必要があります。しかし、列のタイトルを最大 64 文字の長さに減らしたいと考えています。質問をより一般的にするために、簡単な例を見てみましょう:
$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 test」キーの名前を「Q tes」に変更したいと思います。私が行った場合 :
$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)
列の位置が変更されました。それは私が探していたものではありません。
(ここでは、キーを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);
出力:
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の行があります。
配列キーを移動せずに名前を変更する簡単な方法はありますか?