Я сохранил содержимое массива в виде массива json в базе данных.
Формат: [ "1", "2", "3" ]
Теперь я получил значение из базы данных и попытался удалить третий элемент "2" из той же структуры.
Мой код для этого
$numbers= json_decode($numbers_db,true); //json decode numbers array got from DB
if (($key = array_search(2, $numbers)) !== false) {
unset($numbers[$key]);
}
$numbers_final = json_encode($numbers);
Теперь я ожидал, что $numbers_final будет иметь формат: ["1","3"]
Но это привело к {"0":"1","2":"3"}
Проблема заключается в том, что когда вы unset()
элемент, индексы сохраняются в целости. В этом случае индекс 1
больше не существует, поэтому массив преобразуется в объект.
Чтобы заставить массив повторно индексироваться последовательно, вы можете сделать что-то вроде этого:
$numbers_db = '["1", "2", "3"]';
echo $numbers_db;
$numbers= json_decode($numbers_db,true); //json decode numbers ar
if (($key = array_search(2, $numbers)) !== false) {
unset($numbers[$key]);
$numbers = array_values($numbers);
}
$numbers_final = json_encode($numbers);
echo $numbers_final;