Как я могу удалить элемент массива и переупорядочить впоследствии, не имея пустого элемента в массиве?
<?php
$c = array( 0=>12,1=>32 );
unset($c[0]); // will distort the array.
?>
Ответ / Решение: выстройте array_values ($input массива).
<?php
$c = array( 0=>12,1=>32 );
unset($c[0]);
print_r(array_values($c));
// will print: the array cleared
?>
У вас нет доступа к флагам на языке C, даже если вы можете получить компилятор для создания кода, который их установил, у вас нет пути использовать их.
-121--4903992- Чтобы связать то, что другие уже заявили или намекнули, правила, по которым JAXB XJC решает, помещать ли аннотацию @ StartRootElement
в сгенерированный класс, нетривиальны ( см. эту статью ).
@ StartRootElement
существует, так как во время выполнения JAXB требуется определенная информация для того, чтобы скомпоновать/демонстрировать данный объект, в частности имя элемента XML и пространство имен. Нельзя просто передать какой-то старый предмет Маршалу. Эта информация содержится в @ GroupRootElement
.
Аннотация просто удобна, однако - JAXB ее не требует. Альтернативой является использование объектов-оболочек JAXBElement
, которые предоставляют ту же информацию, что и @ GroupRootElement
, но в форме объекта, а не аннотации.
Однако объекты JAXBElement
создавать неудобно, поскольку необходимо знать имя элемента XML и пространство имен, чего обычно не делает бизнес-логика.
К счастью, когда XJC генерирует модель класса, он также генерирует класс с именем ObjectFactory
. Это частично для обратной совместимости с JAXB v1, но это также место для XJC, чтобы поставить сгенерированные заводские методы, которые создают JAXBelement
обертки вокруг ваших собственных объектов. Он обрабатывает имя XML и пространство имен для вас, поэтому вам не нужно беспокоиться об этом. Чтобы найти нужную схему, просто необходимо просмотреть методы ObjectFactory
(а для большой схемы их может быть сотни).
array_values($c)
возвращает новый массив только со значениями, линейно индексированными.
Если удалить только первый предмет массива, можно использовать array _ shift ($ c);
Можно написать собственную подпрограмму добавления в C, которая вернет флаги переноса и переполнения для подписанные 8-битные операнды. Если вы ссылаетесь на аппаратные биты переноса и переполнения внутри процессор, нет, это невозможно сделать в C.
-121--4903993- Или сброс ();
также является хорошим выбором
Если вы всегда снимаете первый элемент, затем используйте Array_Shift () вместо unset ().
В противном случае вы должны использовать что-то вроде $ a = array_values ($ a).
Если вы удалите только первый элемент массива, вы можете использовать Array_Shift ($ C);