Я сохранил содержимое массива в виде массива 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;
не$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;