代码之家  ›  专栏  ›  技术社区  ›  rg88

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

  •  1
  • rg88  · 技术社区  · 16 年前

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

    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)并返回该值。最好的方法是什么?

    4 回复  |  直到 16 年前
        1
  •  7
  •   Marek    16 年前

    如果您的阵列不是非常深,这可以工作。 ($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被替换,即使是在somethingelsfoo2中,str_replace也可以。

        2
  •  5
  •   bobwienholt    16 年前

    像这样的怎么样:

    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;
    }
    
        3
  •  1
  •   Tom Haigh    16 年前
     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');
    
        4
  •  1
  •   Vinh    16 年前

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

    关于你的编辑。

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

    mycrazystringwithfoo-barrightinthemiddleofit
    

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

    here 希望这有帮助。