Задача заключается в обходе всего дерева. Для этих целей использую рекурсию. Теперь нужно по условию удалить элемент из дерева, если его значение удовлетворяет условие
class Test {
public function __construct() {
$this->test1 = [
'a' => 1,
'b' => [
'd' => [
'e' => 'test'
],
],
'c' => null,
'd' => (object)[
'e' => 'test',
],
'f' => (object)[
'test' => 'a',
'e' => (object)[
'test' => 'test',
],
]
];
$this->test2 = [
'e' => 'test',
];
$this->test3 = 'test';
$this->test4 = [
'test',
];
$this->test5 = (object)[
'test',
];
$this->checkTypeRecursive($this->test1);
$this->checkTypeRecursive($this->test2);
$this->checkTypeRecursive($this->test3);
}
public function checkTypeRecursive(&$values) {
if (is_array($values)) {
foreach ($values as $key => $value) {
$this->checkTypeRecursive($values[$key]);
}
} elseif (is_object($values)) {
foreach ($values as $key => $value) {
$this->checkTypeRecursive($values->$key);
}
} else {
if ($values == 'test') {
//Присвоение по ссылке работает.
$values = 'Привет';
/** А как удалить элемент на который эта ссылка получена */
//unset($values); //Так не сработает ибо это значение.
/**
* Остальная логика
* ....
*/
}
}
}
}
print_r(new Test());
Возможно зашел не с той стороны. Как тогда максимально просто это сделать. Спасибо.