Включить переменную строки подключения перед запросом MySQL. Например, $connt
в этом коде:
$results = mysql_query($connt, "SELECT * FROM users");
Вам просто нужно перезаписать то, что вы удаляете, со следующим значением в массиве, распространить это изменение и затем иметь в виду, где новый конец:
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// delete 3 (index 2)
for (int i = 2; i < 8; ++i)
array[i] = array[i + 1]; // copy next element left
Теперь ваш массив {1, 2, 4, 5, 6, 7, 8, 9, 9}
. Вы не можете удалить дополнительный 9
, так как это массив статического размера, вам просто нужно его игнорировать. Это можно сделать с помощью std::copy
:
std::copy(array + 3, // copy everything starting here
array + 9, // and ending here, not including it,
array + 2) // to this destination
В C ++ 11 вместо этого использовать std::move
(перегрузка алгоритма, а не перегрузка утилиты).
В общем случае используйте std::remove
для удаления элементов, соответствующих значению:
// remove *all* 3's, return new ending (remaining elements unspecified)
auto arrayEnd = std::remove(std::begin(array), std::end(array), 3);
. В более общем смысле, есть std::remove_if
.
Обратите внимание, что использование std::vector<int>
может здесь более уместно, так как это «истинный» динамически распределенный массив изменения размера. (В том смысле, что запрос на его size()
отражает удаленные элементы.)
Вы можете использовать memmove()
, но вы должны сами отслеживать размер массива:
size_t array_size = 5;
int array[5] = {1, 2, 3, 4, 5};
// delete element at index 2
memmove(array + 2, array + 3, (array_size - 2 - 1) * sizeof(int));
array_size--;
В C ++, однако, было бы лучше использовать a std::vector
:
std::vector<int> array;
// initialize array...
// delete element at index 2
array.erase(array.begin() + 2);
Если вас больше всего беспокоит размер и / или производительность кода (также для анализа WCET, если он вам нужен), я думаю, что это, вероятно, будет одним из наиболее прозрачных решений (для поиска и удаления элементов):
unsigned int l=0, removed=0;
for( unsigned int i=0; i<count; i++ ) {
if( array[i] != to_remove )
array[l++] = array[i];
else
removed++;
}
count -= removed;
В зависимости от ваших требований вы можете использовать stl-списки для этих типов операций. Вы можете выполнять итерацию через свой список, пока не найдете элемент, и не удалите элемент. Если вы не можете использовать списки, вам придется переместить все самостоятельно, либо каким-либо алгоритмом stl, либо вручную.
std :: copy выполняет задание относительно движущихся элементов:
#include <algorithm>
std::copy(array+3, array+5, array+2);
Обратите внимание, что предварительным условием для копирования является то, что пункт назначения не должен находиться в исходном диапазоне. Допустимо, чтобы диапазоны перекрывались.
Кроме того, из-за того, как массивы работают на C ++, это не «сокращает» массив. Он просто перемещает элементы внутри него. Невозможно изменить размер массива, но если вы используете отдельное целое число для отслеживания своего «размера», что означает размер части, о которой вы заботитесь, тогда вы можете, конечно, уменьшить это.
Итак, массив, в котором вы закончите, будет таким, как если бы он был инициализирован с помощью:
int array[] = {1,2,4,5,5};
Просто так следует отметить: если требование сохранения порядка элементов ослаблено, гораздо эффективнее заменить элемент, удаляемый последним элементом.
Вы не можете добиться того, чего хотите с помощью массивов. Вместо этого используйте векторы и прочитайте об алгоритме std :: remove. Что-то вроде:
std::remove(array, array+5, 3)
будет работать на вашем массиве, но это не сократит его (почему - потому что это невозможно). С векторами это будет что-то вроде
v.erase(std::remove(v.begin(), v.end(), 3), v.end())