مشكلة بخصوص unset في php

السلام عليكم

احتاج بعض المساعدة

لدي هذا الكود

 $id = $_GET['id'];
  $data = file_get_contents('members.json');
  $json = json_decode($data);
  unset($json[$id]);
  $json = json_encode($json, JSON_PRETTY_PRINT);
  file_put_contents('members.json', $json);

وظيفته هي مسح عنصر محدد من ملف members.json

المشكلة هي ان الملف يكون بهذا الشكل

[
  {
    "title": "aaa",
    "url": "aaa"
  },
  {
    "title": "bbb",
    "url": "bb"
  },
  {
    "title": "zzz",
    "url": "zzz"
  },
  {
    "title": "rrr",
    "url": "rrr"
  }
]

عندما استخدم الكود لحذف عنصر - حسب رقمه الترتيبي - يتحول بعض الحذف الى هذا الشكل ، اي يتم اضافة معرف اخر

ليكون بهذا الشكل

{
  "0": {
    "title": "aaa",
    "url": "aaa"
  },
  "1": {
    "title": "bbb",
    "url": "bb"
  },
  "2": {
    "title": "zzz",
    "url": "zzz"
  },
  "4": {
    "title": "ddd",
    "url": "ddd"
  }
}

جرب القيام بتمرير 'true' كـ argument ثان في دالة json_decode:

$json = json_decode($data, true);

@walid99 شكرا على الرد

تحدث نفس المشكلة /شاهد التجربة هنا

عند حذف اكثر من عنصر يتم تغيير شكل json تم يتعطل زر الحذف

walid99 أضف ردا

المشكلة في دالة unset، استعمل دالة array_splice بدلا منها:

array_splice($json, $id, 1);

الرقم 1 هو عدد العناصر الذي سيتم حذفه من المصفوفة.