@DooglsGo

Как создать ассоциативный массив без нумерации?

Всем привет! Пытался сделать систему друзей, но столкнулся с проблемой: Json декодирует массив и нумерует его, что мне не нужно. Пример на Json'e, То что получается: {"0": {"STEAM_0:1:421410864": 2}, {"STEAM_0:1:27660088": 1}}, что мне нужно: {"STEAM_0:1:421410864": 1, "STEAM_0:0:109168821": 0, "STEAM_0:0:138268647": 2}.
if ($logged_user) { // Если юзер залогинен выполнить код
	$friends = json_decode($pl->friends(), true); // Декодируем друзей профиля и превращаем в массив
    $myfriends = json_decode($logged_user->friends(), true); // Декодируем друзей себя и превращаем в массив

	$cfriends = count($friends, COUNT_RECURSIVE); // Считаем друзей

	if ($_POST['add_friend']) { // Если нажали кнопку "Добавить в друзья" выполнить код
		$addf = json_decode($pl->friends(), true); // Декодируем друзей профиля и превращаем в массив
        $addfa = json_decode($logged_user->friends(), true); // Декодируем друзей себя и превращаем в массив

        $plf = array($pl->steamid() => 2); // Создаём массив с айди профиля и статусом дружбы
        $lgu = array($logged_user->steamid() => 0); // Создаём массив с айди себя и статусом дружбы

        if ($addf != NULL) { // Если массив с друзьями профиля НЕ пуст выполнить код
            array_unshift($addf,$lgu); // Добавляем в НАЧАЛО массива друзей, наш созданый массив
            
            $adda = json_encode($addf); // Encodim массив с старыми и новым другом
        } else { // Если массив с друзьями пуст, просто енкодим созданый массив с новым другом
            $adda = json_encode($lgu);
        }

        if ($addfa != NULL) { // Если массив с нашими друзьями НЕ пуст выполнить код
            array_unshift($addfa,$plf); // Добавляем в НАЧАЛО массива друзей, наш созданый массив
            
            $adda = json_encode($addfa); // Encodim массив с старыми и новым другом
        } else { // Если массив с друзьями пуст, просто енкодим созданый массив с новым другом
            $adda = json_encode($plf);
        }

		$db->execute("UPDATE `players` SET `friends` = '$adda' WHERE `SID` = '{$pl->steamid()}'"); // Заполняем профиль друзьями.
		$db->execute("UPDATE `players` SET `friends` = '$addaa' WHERE `SID` = '{$logged_user->steamid()}'"); // Заполняем себя друзьями.

		echo "<meta http-equiv='refresh' content='0'>"; // Перезагрузка страницы для устранения эффекта двойного добавления в друзья
	}
}
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
IgorPI
@IgorPI
Пример на Json'e, То что получается


Удивительно, каким это образом получается невалидный JSON

Это не правильный JSON
{"0": {"STEAM_0:1:421410864": 2}, {"STEAM_0:1:27660088": 1}}


Вот это правильный JSON
{
  "0": [
    {
      "STEAM_0:1:421410864": 2
    },
    {
      "STEAM_0:1:27660088": 1
    }
  ]
}


Создавайте массив объектов, так как свойства у вас динамические.
Что если вам нужно будет добавить ещё какое-нибудь свойство?
Вот что вам нужно, с точки зрения правильной логики
[
  {
    "STEAM_0:1:421410864": 1
  },
  {
    "STEAM_0:0:109168821": 0
  },
  {
    "STEAM_0:0:138268647": 2
  }
]


На случай расширения
[
  {
    "STEAM_0:1:421410864": 1,
    "balance": "500"
  },
  {
    "STEAM_0:0:109168821": 0,
    "balance": "129"
  },
  {
    "STEAM_0:0:138268647": 2,
    "balance": "100"
  }
]


Да, свойства тоже можно перебрать в цикле, но вы лишаете себя использовать функции для работы с массивами.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы