PHP | Удаляют элемент из массива с переупорядочением?

Как я могу удалить элемент массива и переупорядочить впоследствии, не имея пустого элемента в массиве?

<?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
?>
9
задан Kenan Sulayman 22 April 2012 в 14:39
поделиться

4 ответа

У вас нет доступа к флагам на языке C, даже если вы можете получить компилятор для создания кода, который их установил, у вас нет пути использовать их.

-121--4903992-

Чтобы связать то, что другие уже заявили или намекнули, правила, по которым JAXB XJC решает, помещать ли аннотацию @ StartRootElement в сгенерированный класс, нетривиальны ( см. эту статью ).

@ StartRootElement существует, так как во время выполнения JAXB требуется определенная информация для того, чтобы скомпоновать/демонстрировать данный объект, в частности имя элемента XML и пространство имен. Нельзя просто передать какой-то старый предмет Маршалу. Эта информация содержится в @ GroupRootElement .

Аннотация просто удобна, однако - JAXB ее не требует. Альтернативой является использование объектов-оболочек JAXBElement , которые предоставляют ту же информацию, что и @ GroupRootElement , но в форме объекта, а не аннотации.

Однако объекты JAXBElement создавать неудобно, поскольку необходимо знать имя элемента XML и пространство имен, чего обычно не делает бизнес-логика.

К счастью, когда XJC генерирует модель класса, он также генерирует класс с именем ObjectFactory . Это частично для обратной совместимости с JAXB v1, но это также место для XJC, чтобы поставить сгенерированные заводские методы, которые создают JAXBelement обертки вокруг ваших собственных объектов. Он обрабатывает имя XML и пространство имен для вас, поэтому вам не нужно беспокоиться об этом. Чтобы найти нужную схему, просто необходимо просмотреть методы ObjectFactory (а для большой схемы их может быть сотни).

-121--615850-
array_values($c)

возвращает новый массив только со значениями, линейно индексированными.

14
ответ дан 4 December 2019 в 10:32
поделиться

Если удалить только первый предмет массива, можно использовать array _ shift ($ c);

-121--3279188-

Можно написать собственную подпрограмму добавления в C, которая вернет флаги переноса и переполнения для подписанные 8-битные операнды. Если вы ссылаетесь на аппаратные биты переноса и переполнения внутри процессор, нет, это невозможно сделать в C.

-121--4903993-

Или сброс (); также является хорошим выбором

-1
ответ дан 4 December 2019 в 10:32
поделиться

Если вы всегда снимаете первый элемент, затем используйте Array_Shift () вместо unset ().

В противном случае вы должны использовать что-то вроде $ a = array_values ​​($ a).

4
ответ дан 4 December 2019 в 10:32
поделиться

Если вы удалите только первый элемент массива, вы можете использовать Array_Shift ($ C);

1
ответ дан 4 December 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: