从多维数组中删除键的动态数组

时间:2020-10-27 12:20:11

标签: php arrays

在过去的一个小时中,我一直在浏览文章和SO问题,但仍然找不到我想要的东西。

我有一个一维字符串数组,其中包含来自多维数组的键。这两个数组都是动态的。我需要一种方法来从MD阵列中删除1D中的每个键。

很难解释,所以让我告诉你。

$dynamicKeys = ['date', 'name', 'account'];

$arrayRequiringSanitization = [
  'name' => [
    'first' => 'Homer',
    'last' => 'simpson'
  ],
  'age' => 'unknown',
  'facts' => [
    'history' => [
      'date' => 'whenever',
      'occurred' => 'nope'
    ],
    'is' => 'existing'
  ]
];

function removeDynamicValues($arr, $vals) {
  // this is where i need help
}

removeDynamicValues函数应使用$arrayRequiringSanitization$dynamicKeys并返回如下所示的数组:

$arrayRequiringSanitization = [
  'age' => 'unknown',
  'facts' => [
    'history' => [
      'occurred' => 'nope'
    ],
    'is' => 'existing'
  ]
];

因此,基本上,它删除了name子数组和date子子属性。重要的是两个数组都是动态的,而且未知$arrayRequiringSanitization的嵌套深度。

让我知道是否需要进一步澄清。

1 个答案:

答案 0 :(得分:1)

您可以使用递归很容易地做到这一点,但是如果您的数组要深化此实现。这是代码。

/**
 * @param array<mixed> $arr initial array
 * @param array<string|int> $vals array of keys that need to be deleted
 * @return array<mixed>
 */
function removeDynamicValues(array $arr, array $vals): array
{
    $out = [];
    foreach ($arr as $key => $value) {
        if (!in_array($key, $vals, true)) {
            $out[$key] = is_array($value) ? removeDynamicValues($value, $vals) : $value;
        }
    }
    return $out;
}