C# 如何在unity C中排序和显示阵列以创建排行榜#

C# 如何在unity C中排序和显示阵列以创建排行榜#,c#,php,sorting,unity3d,leaderboard,C#,Php,Sorting,Unity3d,Leaderboard,我现在有点问题,我必须和员工一起使用数据库。这些雇员有不同的数据,这些是字符串和整数。数组中的示例是:Naam:Pino |团队:2 | VerkoopA:12 | VerkoopB:12 | NPS:40 |转换:10 这是一个只有一名员工的示例,数据库中还有更多员工,我已经在代码中对他们进行了拆分。我想做的是用这些数据制作一个排行榜,但是我不知道如何分离数组中的不同项目,如果我已经分离了这些项目,我如何对数组进行排序,以查看谁的销售额最高,谁的销售额最高,这样我就可以制作一个带有过滤器的排行

我现在有点问题,我必须和员工一起使用数据库。这些雇员有不同的数据,这些是字符串和整数。数组中的示例是:Naam:Pino |团队:2 | VerkoopA:12 | VerkoopB:12 | NPS:40 |转换:10

这是一个只有一名员工的示例,数据库中还有更多员工,我已经在代码中对他们进行了拆分。我想做的是用这些数据制作一个排行榜,但是我不知道如何分离数组中的不同项目,如果我已经分离了这些项目,我如何对数组进行排序,以查看谁的销售额最高,谁的销售额最高,这样我就可以制作一个带有过滤器的排行榜

还有没有一种简单的方法可以显示一定数量的员工的视觉排行榜?因为我现在展示它的方式什么都没有

我正在使用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;
    }

}
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);
    }
}
使用UnityEngine;
使用UnityEngine.UI;
使用系统集合;
公共类排行榜:MonoBehavior
{
//所有员工的数组
公共字符串[]排行榜;
文本文本;
IEnumerator Start()
{
//从mySQL获取排行榜数据。
WWW排行榜数据=新WWW(“http://localhost/leaderboards.php");
收益率排行榜数据;
//拆分阵列中的每个员工,使他们彼此分开|
//一个示例消息Naam:Pino |团队:2 | VerkoopA:12 | VerkoopB:12 | NPS:40 |转换:10
字符串leaderboardsDataString=leaderboardsData.text;
排行榜=排行榜数据。拆分(“;”);
//对于数组中的每个员工,打印每个员工的数据。
foreach(排行榜中的字符串员工)
{
字符串employeeappeat=employee;
显示排行榜(员工除外);
}
}
//逐个显示排行榜。
无效显示排行榜(字符串EmployeeAppeat)
{
打印(员工公寓);
txt=gameObject.GetComponent();
txt.text=雇员分开;
}
string GetDataValue(字符串数据、字符串索引)
{
字符串值=data.Substring(data.IndexOf(index)+index.Length);
如果(value.Contains(“|”)value=value.Remove(value.IndexOf(“|”);
返回值;
}
}
PHP:


编辑:

在程序员的帮助下,我决定使用json

我现在有点问题,我必须和员工一起使用数据库。这些员工有不同的数据。我的PHP文件的输出为:

[{“ID”:“1”,“团队”:“2”,“VerkoopB”:“35”,“VerkoopB”:“12”,“NPS”:“25”,“转换”:“18”},{“ID”:“2”,“团队”:“1”,“VerkoopA”:“55”,“VerkoopB”:“2”,“NPS”:“12”,“转换”:“40”},{“ID”:“3”,“团队”:“2”,“VerkoopB”:“12”,“NPS”:“40”,“转换”:“10”]

我想做的事情是用这些数据制作排行榜,但是我不知道如何使用JsonHelper来分离数组中的不同项,我得到一个错误:ArgumentException:JSON必须表示一个对象

脚本:

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;
    }

}
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);
    }
}
使用UnityEngine;
使用UnityEngine.UI;
使用系统集合;
公共类排行榜:MonoBehavior
{
//所有员工的数组
[系统可序列化]
公共类排行榜
{
公共字符串ID;
公共弦乐队;
公共字符串VerkoopA;
公共字符串VerkoopB;
公共字符串NPS;
公共字符串转换;
}
文本文本;
IEnumerator Start()
{
//从mySQL获取排行榜数据。
WWW排行榜数据=新WWW(“http://localhost/leaderboards.php");
收益率排行榜数据;
字符串leaderboardsDataString=leaderboardsData.text;
印刷(排行榜);
排行榜[]排行榜;
Leadboard=JsonHelper.FromJson(LeadboardsDataString);
//对于数组中的每个员工,打印每个员工的数据。
foreach(排行榜中的排行榜员工)
{
显示排行榜(员工);
}
}
//逐个显示排行榜。
无效显示排行榜(排行榜员工除外)
{
Debug.Log(“ID:+employeeappeat.ID”);
Debug.Log(“团队:+employeeApart.Team”);
Log(“VerkoopA:+employeeApart.VerkoopA”);
Log(“VerkoopB:+employeeApart.VerkoopB”);
调试日志(“NPS:+employeeApart.NPS”);
Log(“转换:+employeeApart.Conversie”);
}
}
PHP:


由于您可以访问服务器和服务器脚本(php),因此应该使用
json
xml
来执行此操作,而不是使用
分隔数据

将数据库中的数据作为json发送。在Unity端,使用
WWW
class接收数据,然后使用
JsonUtility
将json转换回类

Unity的
JsonUtility
不支持数组,因此需要一个针对它的包装器。您可以获得允许json数组的
JsonHelper

这就是我上面描述的情况:

[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);
}
或通过
NPS

leaderboard = leaderboard.OrderBy(c => c.NPS).ToArray();
这必须在
foreach
循环之前完成

编辑:

php生成的json不能直接在Unity中准备好。不擅长php,无法修复php端的json数据。虽然,我可以在统一方面解决它

在收到的字符串前面添加
{“Items”:
,然后在其末尾添加
}

我为此制作了一个简单的函数:

string fixJson(string value)
{
    value = "{\"Items\":" + value + "}";
    return value;
}
将该函数包括到脚本中,然后简单地替换

string leaderboardsDataString = leaderboardsData.text;


现在一切都正常了。

您可能知道GPG已经有了一个完整的排行榜系统。嗯,我为一家有自己安全数据库的公司使用这个,他们有很多限制和安全性,这是我的本地
string leaderboardsDataString = leaderboardsData.text;
string leaderboardsDataString = fixJson(leaderboardsData.text);