0

列の順序を変更してはならない 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の行があります。

配列キーを移動せずに名前を変更する簡単な方法はありますか?

4

1 に答える 1

2

これを試してみてください。これはより簡単なはずです。

foreach($array as $k=>$v){
   if($k=='Q test'){
      $new_arr['Q tes'] = $array['Q test'];
   }else{
      $new_arr[$k] = $v;
   }
}

print_r($new_arr); //set $array = $new_arr;  to overwrite all values
于 2012-12-03T10:46:59.700 に答える