【问题标题】:PHP - Editing multiple array values (if they exist)PHP - 编辑多个数组值(如果它们存在)
【发布时间】:2010-09-20 19:01:03
【问题描述】:

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

示例数组:

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 实际上可以是任何 foo(例如 examplefoo1、somethingelsefoo2、blahblahfoo3)。我认为这排除了 str_replace。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    这样的事情怎么样:

    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】:

      如果您的阵列不会非常深,这可以工作。 ($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' );
      

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

      【讨论】:

        【解决方案3】:
         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】:

        如果你有一个一维数组,你应该可以使用array_map();

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

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

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

        还是会回来

        mycrazystringwithfoo-barrightinthemiddleofit
        

        如果您的数组是任意深度的树结构,那么您将不可避免地不得不使用递归并且问题变得不简单。你可能想看看

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-01
          • 2011-05-19
          • 1970-01-01
          • 1970-01-01
          • 2013-09-24
          • 2018-02-22
          相关资源
          最近更新 更多