Я посмотрел на все вопросы об отмене сброса элементов, и я не делаю ни одной из этих ошибок, но элемент все еще там после того, как я его сбросил.
Обновление: я включил предложение RichardBernards ниже, но это все еще происходит:
foreach($oldObject AS $key1=>$val1)
{
if (!empty($val1))
{
$newObject->$key1 = $val1;
if (is_array($oldObject->$key1))
{
foreach ($oldObject->$key1 as $key2 => $val2)
{
if (empty($val2))
{
print('Found to be empty: unsetting newObject->' . $key1 . '[' . $key2 . ']');
unset($newObject->$key1[$key2]);
if (array_key_exists($key2, $newObject->$key1))
{
print('The key ' . $key2 . ' still exists. What is going on?');
}
}
}
}
}
}
В этом коде текст «Ключ все еще существует. Что происходит?» печатается каждый раз.
Я должен удалить пустые элементы, потому что я делаю SOAP-вызов с объектом, и SOAP отклоняет объект, если в нем есть пустые строки. Но почему $newObject->$var[$key]
все еще существует после того, как я явно сбросил его?
Это потому, что я пытаюсь сбросить элемент массива внутри объекта?
Любая помощь будет принята с благодарностью.
Это потому, что вы отменяете переменную в foreach по массиву … Это невозможно. Самый простой способ решить эту проблему — скопировать массив и перейти по первому массиву, удалить ключ во втором массиве … Затем использовать второй массив в своем коде.
Долгий путь заключается в использовании таких функций, как array_walk () или хранении ключей, которые вы хотите сбросить, в другом массиве и сброс их после foreach …
Других решений пока нет …