PHP - 编辑多个数组值(如果存在)

时间:2008-11-04 22:22:31

标签: php arrays

我有一个多维数组。我需要搜索特定范围的值,编辑这些值并返回编辑过的数据。

示例数组:

array(3) {
  ["first"]=>
  array(1) {
    [0]=>
    string(4) "baz1"
  }
  ["second"]=>
  array(1) {
    [0]=>
    string(4) "foo1"
  }
  ["third"]=>
  array(1) {
    [0]=>
    string(4) "foo2"
  }

现在我想找到与foo匹配的任何值(示例数组中的foo1和foo2),在其中插入“-bar”(foo-bar1,foo-bar2)并返回该值。有什么方法可以解决这个问题?

EDIT 我应该提到foo实际上可能是whatfoo(例如examplefoo1,somethingelsefoo2,blahblahfoo3)。我认为这排除了str_replace。

4 个答案:

答案 0 :(得分:7)

如果您的阵列不是非常深,这可以工作。 ($ array是您想要在以后替换的内容)

$array= array('first' => array('bazi1'), 'second' => array('foo1'), 'third' => array('foo2') );
function modify_foo(&$item, $key)
{
   $item = str_replace('foo', 'foo-bar', $item);
}
array_walk_recursive( $array, 'modify_foo' );

如果你想要foo甚至在somethingelsefoo2中被替换,那么str_replace就可以了。

答案 1 :(得分:5)

这样的事情怎么样:

function addDashBar($arr)
{
    foreach ($arr as $key => $value)
    {
       if (is_array($value))
           $arr[$key] = addDashBar($value)
       else
       {
           $arr[$key] = str_replace($value, "foo", "foo-bar");
       }
    }

    return $arr;
}

答案 2 :(得分:1)

 function test_replace1(&$input, $search, $replace) {
    $result = array();
    $numReplacements = 0;
    foreach ($input as &$value) {
        if (is_array($value)) {
            $result = array_merge($result, test_replace1($value, $search, $replace));
        } else {
            $value = str_replace($search, $replace, $value, $numReplacements);
            if ($numReplacements) {
                $result[] = $value;
            }
        }
    }
    return $result;
 }

 $changed_values = test_replace1($arr, 'foo', 'foo-bar');

答案 3 :(得分:1)

如果您有一维数组,则应该能够使用array_map();

**编辑:我在这里有一些代码,但经过测试,它不起作用。

关于你的编辑。 仅仅因为Foo位于字符串的末尾,并不意味着str_replace将不再起作用。

echo str_replace("foo","foo-bar","mycrazystringwithfoorightinthemiddleofit");

仍会返回

mycrazystringwithfoo-barrightinthemiddleofit

如果你的数组是任意深度的树结构,那么你不可避免地必须使用递归并且问题变得非常重要。您可能想查看

array_recursive_walk()函数。 here 希望这会有所帮助。