简体   繁体   中英

PHP Removing by reference

I'm trying to remove stdClass property by reference. Because I don't know how deeply the property is nested, a reference is made in the loop. But the unset method does not remove variables by reference. How can I resolve it without just setting a null value?

<?php
$data = new stdClass();
$data->foo = new stdClass();
$data->foo->bar = 'value';

$pathToRemove = 'foo.bar';

$dataReference = &$data;
foreach (explode('.', $pathToRemove) as $field) {
    $dataReference = &$dataReference->$field;
}
unset($dataReference);

var_dump($data);

Loop over all the elements except the last. Then use the last element as the field to delete.

$pathArray = explode('.', $pathToRemove);
$lastField = array_pop($pathArray);
$dataReference = &$data;
foreach ($pathArray as $field) {
    $dataReference = &$dataReference->$field;
}
unset($dataReference->$lastField);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM