Как отсортировать и отобразить массив для создания списков лидеров в единстве C #

У меня возникла небольшая проблема на данный момент, я должен работать с базой данных с сотрудниками. эти сотрудники имеют разные данные. Это строки и целые числа. Пример того, что находится в массиве: Naam: Pino | Команда: 2 | VerkoopA: 12 | VerkoopB: 12 ​​| NPS: 40 | conversie: 10.

это пример только одного сотрудника, в базе данных их больше, и я уже разделил их в коде. Я хочу сделать из этих данных списки лидеров, однако я не знаю, как разделить различные элементы в массиве, и если я разделил это, как я могу отсортировать массив, чтобы увидеть, кто больше всего пользуется saleA, а кто — нет? самый продаваемый, так что я могу сделать это в таблице лидеров с фильтром.

Также существует ли простой способ иметь визуальные списки лидеров, которые могут отображать определенное количество сотрудников? Потому что то, как я его сейчас показываю, ничего не показывает.

Я использую Unity и свой собственный сервер с Xampp

С наилучшими пожеланиями,

Dh

Автор сценария:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Leaderboard : MonoBehaviour
{

// Array of all the employees
public string[] leaderboard;

Text txt;

IEnumerator Start()
{// Getting the leaderboard data from mySQL.
WWW leaderboardsData = new WWW("http://localhost/leaderboards.php");
yield return leaderboardsData;

// Split every employee in the Array so they are all apart from each other. |
// an example Message Naam:Pino | Team:2 | VerkoopA:12 | VerkoopB:12 | NPS:40 | Conversie:10
string leaderboardsDataString = leaderboardsData.text;
leaderboard = leaderboardsDataString.Split(';');

// for every employee in the array print every employee's data.
foreach (string employee in leaderboard)
{
string employeeApart = employee;
DisplayLeaderboards(employeeApart);
}

}

// Display the leaderboards 1 by 1.
void DisplayLeaderboards(string employeeApart)
{
print(employeeApart);

txt = gameObject.GetComponent<Text>();
txt.text = employeeApart;
}string GetDataValue(string data, string index)
{
string value = data.Substring(data.IndexOf(index) + index.Length);
if (value.Contains("|")) value = value.Remove(value.IndexOf("|"));
return value;
}

}

PHP:

<?php
$servername = "localhost";
$username =  "root";
$password = "";
$dbName = "test3";

//Make Connection
$conn = new mysqli($servername, $username, $password, $dbName);
//Check Connection
if(!$conn){
die("Connection Failed. ". mysqli_connect_error());
}

$sql = "SELECT ID, Team, VerkoopA, VerkoopB, NPS, Conversie FROM Leaderboards";
$result = mysqli_query($conn ,$sql);if(mysqli_num_rows($result) > 0){
//show data for each row
while($row = mysqli_fetch_assoc($result)){
echo "ID:".$row['ID'] . "|Team:".$row['Team']. "|VerkoopA:".$row['VerkoopA']. "|VerkoopB:".$row['VerkoopB'] . "|NPS:".$row['NPS']. "|Conversie:".$row['Conversie'] . ";";
}
}

?>

РЕДАКТИРОВАТЬ:

После помощи программистов я решил использовать json

У меня возникла небольшая проблема на данный момент, я должен работать с базой данных с сотрудниками. эти сотрудники имеют разные данные, вывод моего файла PHP:

[{ «ID»: «1», «Команда»: «2», «VerkoopA»: «35», «VerkoopB»: «12», «NPS»: «25», «Conversie»: «18»} , { «ID»: «2», «Команда»: «1», «VerkoopA»: «55», «VerkoopB»: «2», «NPS»: «12», «Conversie»: «40»} , { «ID»: «3», «Команда»: «2», «VerkoopA»: «12», «VerkoopB»: «12», «NPS»: «40», «Conversie»: «10»} ]

Я хочу сделать из этих данных списки лидеров, однако я не знаю, как разделить различные элементы в массиве. Используя JsonHelper, я получаю ошибку: ArgumentException: JSON должен представлять объект

Автор сценария:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Leaderboard: MonoBehaviour
{
// Array of all the employees

[System.Serializable]
public class LeaderBoard
{
public string ID;
public string Team;
public string VerkoopA;
public string VerkoopB;
public string NPS;
public string Conversie;
}Text txt;

IEnumerator Start()
{
// Getting the leaderboard data from mySQL.
WWW leaderboardsData = new WWW("http://localhost/leaderboards.php");
yield return leaderboardsData;

string leaderboardsDataString = leaderboardsData.text;

print(leaderboardsDataString);
LeaderBoard[] leaderboard;
leaderboard = JsonHelper.FromJson<LeaderBoard>(leaderboardsDataString);

// for every employee in the array print every employee's data.
foreach (LeaderBoard employee in leaderboard)
{
DisplayLeaderboards(employee);
}

}// Display the leaderboards 1 by 1.
void DisplayLeaderboards(LeaderBoard employeeApart)
{
Debug.Log("ID: " + employeeApart.ID);
Debug.Log("Team: " + employeeApart.Team);
Debug.Log("VerkoopA: " + employeeApart.VerkoopA);
Debug.Log("VerkoopB: " + employeeApart.VerkoopB);
Debug.Log("NPS: " + employeeApart.NPS);
Debug.Log("Conversie: " + employeeApart.Conversie);
}
}

PHP:

<?php
$servername = "localhost";
$username =  "root";
$password = "";
$dbName = "test3";

//Make Connection
$conn = new mysqli($servername, $username, $password, $dbName);
//Check Connection
if(!$conn){
die("Connection Failed. ". mysqli_connect_error());
}$sql = "select * from Leaderboards";
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));

//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
$emparray[] = $row;
}

echo json_encode($emparray);
?>

1

Решение

Поскольку у вас есть доступ к серверу и сценарию сервера (php), вы должны сделать это с json или же xml вместо разделения данных с |,

Отправьте данные из базы данных как json. Со стороны Unity получите данные с WWW класс затем преобразовать JSON обратно в класс с JsonUtility,

Юнити JsonUtility не поддерживает массив, поэтому вам понадобится обёртка против него. Вы можете получить JsonHelper класс, который позволяет массив JSON Вот.

Это то, что я описал выше, должно выглядеть так:

[System.Serializable]
public class LeaderBoard
{
public string ID;
public string Team;
public string VerkoopA;
public string VerkoopB;
public string NPS;
public string Conversie;
}

Text txt;

IEnumerator _Start()
{// Getting the leaderboard data from mySQL.
WWW leaderboardsData = new WWW("http://localhost/leaderboards.php");
yield return leaderboardsData;string leaderboardsDataString = leaderboardsData.text;
LeaderBoard[] leaderboard = JsonHelper.FromJson<LeaderBoard>(leaderboardsDataString);

// for every employee in the array print every employee's data.
foreach (LeaderBoard employee in leaderboard)
{
DisplayLeaderboards(employee);
}

}

// Display the leaderboards 1 by 1.
void DisplayLeaderboards(LeaderBoard employeeApart)
{
Debug.Log("ID: " + employeeApart.ID);
Debug.Log("Team: " + employeeApart.Team);
Debug.Log("VerkoopA: " + employeeApart.VerkoopA);
Debug.Log("VerkoopB: " + employeeApart.VerkoopB);
Debug.Log("NPS: " + employeeApart.NPS);
Debug.Log("Conversie: " + employeeApart.Conversie);
}

На стороне PHP, вы должны использовать json_encode функция для кодирования информации вашей базы данных в массив json перед отправкой в ​​Unity. Не php парень, но вы можете узнать больше об этом Вот а также Вот.

Сортировка результата:

Вы можете сортировать по ID после получения данных с сервера с

leaderboard = leaderboard.OrderBy(c => c.ID).ToArray();

или NPS

leaderboard = leaderboard.OrderBy(c => c.NPS).ToArray();

Это должно быть сделано до foreach петля.

РЕДАКТИРОВАТЬ:

Ваш json, сгенерированный php, не может быть готов напрямую в Unity. Не хорош в php и не может исправить данные json на стороне php. Хотя я могу это исправить на стороне Unity.

добавлять {"Items": перед полученной строкой, затем добавьте } в конце этого.

Я сделал простую функцию для этого:

string fixJson(string value)
{
value = "{\"Items\":" + value + "}";
return value;
}

Включите эту функцию в ваш скрипт, а затем просто замените

string leaderboardsDataString = leaderboardsData.text;

с

string leaderboardsDataString = fixJson(leaderboardsData.text);

Теперь все должно работать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]