数组的str_replace()和strpos()?

时间:2010-05-12 22:16:02

标签: php arrays str-replace strpos

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

以前,数组看起来像这样:$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。

我以为我会在整个数组上使用str_replace,但令我沮丧的是它只适用于字符串(go figure,heh)而不是数组。

2 个答案:

答案 0 :(得分:1)

这个想法:

  1. 获取所有数组键的列表
  2. 根据您的选择修改其中的每一个
  3. 将现有密钥替换为已修改的密钥
  4. 代码:

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

    这实际上做的是创建一个新数组,它与原始数组具有相同的值,但其中的键已被更改。

    修改:根据卡米尔的评论更新。

答案 1 :(得分: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']);