在过去的一个小时中,我一直在浏览文章和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
的嵌套深度。
让我知道是否需要进一步澄清。
答案 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;
}