1

私はいくつかの配列キーの名前を変更したデータの配列を扱っていますが、データは基本的に同じままにしておきたいです...基本的には、配列に格納されているデータを保持できるようにしたいですDB に関連付けられている配列キー名を更新したいと考えています。

以前は、配列は次のようになっていました。$var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4');

現在、配列のキーには "foo" ではなく "bar" がプレフィックスとして付けられています。では、配列変数を更新して「foos」を取り除き、代わりに「bars」に置き換えるにはどうすればよいでしょうか?

そのようです:$var_opts['services'] = array('bar-1', 'bar-2', 'bar-3', 'bar-4');

私はすでにif(isset($var_opts['services']['foo-1'])) { unset($var_opts['services']['foo-1']); }fooを取り除くために使用しています...各fooをバーに置き換える方法を理解する必要があります。

配列全体で str_replace を使用すると思っていましたが、残念なことに、配列ではなく文字列でのみ機能します (図を参照してください)。

4

2 に答える 2

1

アイデア:

  1. すべての配列キーのリストを取得する
  2. 選択したとおりにそれぞれを変更します
  3. 既存のキーを変更されたキーに置き換えます

コード:

$keys = array_keys($arr);
$values = array_values($arr);
$new_keys = str_replace('foo', 'bar', $keys);
$arr = array_combine($new_keys, $values);

これが実際に行うことは、元の配列と同じ値を持つがキーが変更された新しい配列を作成することです。

編集:以下のカミルのコメントに従って更新されました。

于 2010-05-12T22:19:06.880 に答える
0

あなたが提供した値について $var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4');

var_dump($var_opts['services']);

foreach($var_opts['services'] as &$val) {
    $val = str_replace('foo', 'bar', $val);
}
unset($val);

var_dump($var_opts['services']);

または、実際のキーを変更したい場合

$var_opts['services'] = array('foo-1'   => 1, 'foo-2'   => 2, 'foo-3'   => 3, 'foo-4'   => 4);
var_dump($var_opts['services']);
foreach($var_opts['services'] as $i => $val) {
    unset($var_opts['services'][$i]);
    $i = str_replace('foo', 'bar', $i);
    $var_opts['services'][$i] = $val;
}

var_dump($var_opts['services']);
于 2010-05-12T22:29:37.627 に答える