Он выделяет столько места в соответствии со значением n, и указатель укажет на массив i.e 1-й элемент массива
int *array = new int[n];
Вот пример рекурсивного решения, основанного на foreach, для вашего кода, работающего с предоставленным вами набором данных.
$sourceArray = array("a" => 3, "b" => 0, "c" => array("1" => "aa", "2" => 1, "3" => array("a1" => 6, "a2" => 5781, "a3" => array("1" => 0, "2" => 19550, "3" => 5781)), array( "a1" => 1, "a2" => 5781, "a3" =>array("1" => 0, "2" => 19550, "3" => 5781 ))), array( "1" => "aa", "2" => 1, "3" => array( array( "a1" => 6, "a2" => 5781, "a3" => array( "1" => 0, "2" => 19550,"3" => 5781))), array( "a1" => 1, "a2" => 5781, "a3" =>array( "1" => 0, "2" => 19550, "3" => 5781))));
print_r($sourceArray,1);
function removeKeys($keys, $sourceData) {
foreach ($sourceData as $key=>$val) {
if (in_array($key, $keys, true)) {
unset($sourceData[$key]);
} else if (is_array($val)) {
$sourceData[$key] = removeKeys($keys, $sourceData[$key]);
}
}
return $sourceData;
}
$keysToRemove = array("b","2","a2");
$newArray = removeKeys($keysToRemove, $sourceArray);
print_r($newArray);
Простота реализации, хотя получение ваших данных было сложной задачей. В этом примере я заметил «ошибку» в том, что если ключ равен «0» в исходном массиве, он все равно удаляется, даже если его нет в массиве $ keys.
Но я предполагаю, что этого примера достаточно, чтобы ответить на ваш вопрос, и что мой заявленный крайний случай не произойдет (т. Е. «0» не является ключевым значением в вашем массиве.) Если вы используете « 0 "в качестве ключа вы можете добавить дополнительную логику, чтобы перехватить этот случай, но это немного замедлит работу функции, поэтому я оставлю этот выбор на ваше усмотрение.
(Обратите внимание, что ошибка, упомянутая выше, исправлена сейчас и в коде ... см. Примечания ниже для решения от оригинального постера)