Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多维数组中删除键的动态数组_Php_Arrays - Fatal编程技术网

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

Php 从多维数组中删除键的动态数组,php,arrays,Php,Arrays,在过去的一个小时里,我浏览了很多文章和问题,但仍然找不到我想要的东西 我有一个一维字符串数组,其中包含多维数组中的键。两个数组都是动态的。我需要一种方法从MD数组中删除1D中的每个键 这很难解释,所以让我给你看看 $dynamicKeys = ['date', 'name', 'account']; $arrayRequiringSanitization = [ 'name' => [ 'first' => 'Homer', 'last' => 'simp

在过去的一个小时里,我浏览了很多文章和问题,但仍然找不到我想要的东西

我有一个一维字符串数组,其中包含多维数组中的键。两个数组都是动态的。我需要一种方法从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
子属性。重要的是这两个数组都是动态的,不知道嵌套的深度有多深


如果我需要提供进一步的澄清,请告诉我。

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

/**
 * @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;
}
/**
*@param数组$arr初始数组
*@param array$vals需要删除的密钥数组
*@return数组
*/
函数removeDynamicValues(数组$arr,数组$vals):数组
{
$out=[];
foreach($arr作为$key=>$value){
如果(!in_数组($key,$vals,true)){
$out[$key]=is_数组($value)?removeDynamicValues($value,$vals):$value;
}
}
退回$out;
}

使用复制品中的技术: