Вы должны создать рекурсивную функцию, это означает, что сам вызов функции выполняется до тех пор, пока не будет выполнено условие, а затем он возвращает результат и проходит через стек ранее вызванной функции для определения конечных результатов. Вот так
<?php
// associative array containing array, string and object
$array = ['hello' => 1, 'world' => [1,2,3], '!' => ['hello', 'world'], 5 => new Helloworld()];
// class helloworld
class Helloworld {
public $data;
function __construct() {
$this->data = "I'm an object data";
}
}
//function to read all type of data
function recursive($obj) {
if(is_array($obj) or is_object($obj)) {
echo ' [ '.PHP_EOL;
foreach($obj as $key => $value) {
echo $key.' => ';
recursive($value);
}
echo ' ] '.PHP_EOL;
} else {
echo $obj.PHP_EOL;
}
}
// call recursive
recursive($array);
?>
Это печатает примерно так:
[
hello => 1
world => [
0 => 1
1 => 2
2 => 3
]
! => [
0 => hello
1 => world
]
5 => [
data => I'm an object data
]
]
Надеюсь, это поможет?
Оператор delete удаляет только ссылку, но не сам объект. Если бы он действительно удалил сам объект, другие оставшиеся ссылки были бы висячими, как удаление C ++. (И доступ к одному из них вызовет сбой. Чтобы все они стали пустыми, это означало бы дополнительную работу при удалении или дополнительную память для каждого объекта.)
Поскольку Javascript собирает мусор, вам не нужно удалять сами объекты - они будут удалены, когда на них больше нельзя будет ссылаться.
Может быть полезно удалить ссылки на объект, если вы закончили с ними, потому что это дает сборщику мусора больше информации о том, что можно восстановить. Если ссылки остаются на большой объект, это может привести к тому, что он не будет восстановлен, даже если остальная часть вашей программы фактически не использует этот объект.
Исходя из документации Mozilla: «Вы можете использовать оператор delete для удаления переменных, объявленных неявно, но не тех, которые объявлены с помощью оператор var. "
Вот ссылка: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Operators:Special_Operators:delete_Operator
Команда delete
не влияет на обычные переменные, только на свойства. После команды delete
свойство не имеет значения null
, оно вообще не существует.
Если свойство является ссылкой на объект, удалить Команда
удаляет свойство, но не объект. Сборщик мусора позаботится об объекте, если у него нет других ссылок на него.
Пример:
var x = new Object();
x.y = 42;
alert(x.y); // shows '42'
delete x; // no effect
alert(x.y); // still shows '42'
delete x.y; // deletes the property
alert(x.y); // shows 'undefined'
(протестировано в Firefox.)