首页 > 解决方案 > 用另一个数组递归替换具有特定键的一个数组

问题描述

我有一个数组,其中键type == 'foo'必须由自定义数组替换的所有数组。基本上我需要找到一个特定的数组,然后用其他数组替换它。

这里的问题您可以轻松替换一个数组,但是当您插入数组数量时,您正在移动键,因此type == 'foo'不会替换下一个数组

任何帮助,将不胜感激。

这是我所拥有的:

$array = array(
   array(
     'options' => array(
        array(
          'type' => 'foo'
        ),
        array(
          'type' => 'foo'
        ),
        array(
          'type' => 'bar'
        )
      )
   ),
   array(
     'options' => array(
        array(
          'type' => 'bar'
        ),
        array(
          'type' => 'bar'
        ),
        array(
          'type' => 'foo'
        )
      )
   ),
);

我有一个数组应该替换任何数组type == 'foo'

$array_foo = array(
  array(
    'type' => 'custom'
  ),
  array(
    'type' => 'custom_2'
  ),
  array(
    'type' => 'anything'
  ),
);

这是所需的输出:

$array = array(
   array(
     'options' => array(
        array(
          'type' => 'custom'
        ),
        array(
          'type' => 'custom_2'
        ),
        array(
          'type' => 'anything'
        ),
        array(
          'type' => 'custom'
        ),
        array(
          'type' => 'custom_2'
        ),
        array(
          'type' => 'anything'
        ),
        array(
          'type' => 'bar'
        )
      )
   ),
   array(
     'options' => array(
        array(
          'type' => 'bar'
        ),
        array(
          'type' => 'bar'
        ),
        array(
          'type' => 'custom'
        ),
        array(
          'type' => 'custom_2'
        ),
        array(
          'type' => 'anything'
        ),
      )
   ),
);

谢谢你。

标签: php

解决方案


这是一种使用2 个嵌套 foreach 循环array_merge()一个临时数组的方法:

// Pass the array by reference
foreach ($array as &$sub) {
    // Temporary array
    $new_options = [];
    // Loop through options
    foreach ($sub['options'] as $opt) {

        // if type foo: replace by $array_foo items
        if ($opt['type'] == 'foo') {
            $new_options = array_merge($new_options, $array_foo);

            // else, keep original item
        } else {
            $new_options[] = $opt;
        }
    }

    // replace the options
    $sub['options'] = $new_options;
}

并检查输出:

echo '<pre>' . print_r($array, true) . '</pre>';

另请参阅通过引用传递


推荐阅读