php - 递归用另一个数组替换具有特定键的一个数组

标签 php

我有一个数组,其中所有键 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'
        ),
      )
   ),
);

谢谢。

最佳答案

这是使用 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>';

另见 Passing by Reference

关于php - 递归用另一个数组替换具有特定键的一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52117395/

相关文章:

php - 如何在 SimpleXML PHP 中处理 & 和其他特殊字符

PHP MYSQL 对具有公共(public)字段的两个表进行选择查询

php - laravel 4 Eloquent 热切加载关系计数

php - polymer 和 PHP

php - 如何使用php显示psd文件?

php - 发送 APNS 命令 = 2

php - 过早收集资源垃圾

php - 如何获取 session 驱动程序 Laravel 5

php - 如何获得单词字符的所有唯一组合?

php - MySQL 查询中的 CONCAT 值忽略 NULL 值