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