1

我正在处理一组数据,我已经更改了一些数组键的名称,但我希望数据基本上保持不变......基本上我希望能够将数组中的数据存储在数据库,但我想更新与之关联的数组键名。

以前的数组看起来像这样:$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']); }用来摆脱 foos... 我只需要弄清楚如何用 bar 替换每个 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 回答