$new_array = array_values(array_unique($rearrangedFinalData));
Удалите дубликаты и переставьте ключи (при необходимости), прежде чем поместить свой массив в foreach
.
Затем вы можете использовать $new_array
для генерации вашего HTML
Там невозможно делать то, что вы говорите на C ++, с простыми массивами. Решением C ++ для этого является использование библиотеки STL, которая дает вам std :: vector
.
Вы можете использовать вектор
следующим образом:
std::vector< int > arr;
arr.push_back(1);
arr.push_back(2);
arr.push_back(3);
Массивы в C ++ не могут изменять размер во время выполнения. Для этого вам следует использовать вместо этого вектор vector
.
vector<int> arr;
arr.push_back(1);
arr.push_back(2);
// arr.size() will be the number of elements in the vector at the moment.
Как уже упоминалось в комментариях, вектор
определен в заголовке vector
и в заголовке . std
пространство имен. Чтобы использовать его, вы должны:
#include
, а также либо использовать std :: vector
в своем коде, либо добавить
using std::vector;
или
using namespace std;
после #include
line.
Используйте вектор:
#include <vector>
void foo() {
std::vector <int> v;
v.push_back( 1 ); // equivalent to v[0] = 1
}
int arr[] = new int[15];
Переменная arr
содержит адрес памяти. По адресу памяти 15 последовательных строк подряд. На них можно ссылаться с индексом от 0 до 14 включительно.
В php я могу просто сделать это arr [] = 22; это автоматически добавит 22 к следующий пустой индекс массива.
Не существует понятия «следующий» при работе с массивами.
Я думаю, вы упускаете одну важную вещь: как только массив создан, все элементы массива уже существуют. Они неинициализированы, но все они уже существуют. Таким образом, вы не «заполняете» элементы массива по ходу, они уже заполнены, просто неинициализированными значениями. Невозможно проверить наличие неинициализированного элемента в массиве.
Похоже, вы хотите использовать структуру данных, такую как очередь или стек или вектор .
Я полностью согласен с векторным способом
при реализации динамического массива. Однако имейте в виду, что STL предоставляет вам множество контейнеров, отвечающих различным требованиям времени выполнения. Вы должны выбирать один с осторожностью. Например: для быстрой вставки сзади у вас есть выбор между вектором
и декой
.
И я почти забыл, с большой силой приходит большая ответственность :-) Так как vector
являются гибкими по размеру, они часто автоматически перераспределяются, чтобы приспособиться к добавлению элементов. Так что остерегайтесь аннулирования итератора (да, это относится и к указателям). Однако, если вы используете operator []
для доступа к отдельным элементам, вы в безопасности.
Я, возможно, упускаю суть вашего вопроса здесь, и если так, то извиняюсь. Но если вы не собираетесь удалять какие-либо элементы, а только добавляете их, почему бы просто не присвоить переменную следующему пустому слоту? Каждый раз, когда вы добавляете новое значение в массив, просто увеличивайте значение, чтобы оно указывало на следующее.
В C ++ лучшим решением является использование стандартного типа библиотеки std :: list
, что также позволяет динамически увеличивать массив, например:
#include <list>
std::list<int> arr;
for (int i = 0; i < 10; i++)
{
// add new value from 0 to 9 to next slot
arr.push_back(i);
}
// add arbitrary value to the next free slot
arr.push_back(22);
Если вы пишете на C ++, то лучше использовать структуры данных из стандартных библиотека, такая как vector.
Массивы в стиле C очень подвержены ошибкам, и их следует по возможности избегать.