使用 PHP 使用特定的键数组对 Json 数据进行排序

问题描述 投票:0回答:1

我正在使用这样的 json 数据:

  matches = [ 
            "league": {
            "id":123,
            "score": "score 1",
            },
            "league": {
            "id": 7,
            "score": "score 4",
            },
            "league": {
            "id": 45,
            "score": "score 3",
            },
            "league": {
            "id": 34,
            "score": "score 5"}
      ]

因此,我想使用键数组

`[7,45]
` 按特定联赛 ID 对数据进行排序,将数据放在列表的开头,其余部分按升序排列:

matches = [ 
            "league": {
            "id":7,
            "score": "score 1",
            },
            "league": {
            "id": 45,
            "score": "score 4",
            },
            "league": {
            "id": 34,
            "score": "score 3",
            },
            "league": {
            "id": 123,
            "score": "score 5",
            },
            "league": {
            "id": 344,
            "score": "score 6",
            },
php json
1个回答
0
投票

请尝试此代码

$matches = [
    ["league" => ["id" => 123, "score" => "score 1"]],
    ["league" => ["id" => 7, "score" => "score 4"]],
    ["league" => ["id" => 45, "score" => "score 3"]],
    ["league" => ["id" => 34, "score" => "score 5"]],
    ["league" => ["id" => 344, "score" => "score 6"]]
];

$priority_ids = [7, 45];

usort($matches, function ($a, $b) use ($priority_ids) {
    $idA = $a['league']['id'];
    $idB = $b['league']['id'];

    $posA = array_search($idA, $priority_ids);
    $posB = array_search($idB, $priority_ids);

    if ($posA !== false && $posB !== false) {
        return $posA - $posB; // Sort by priority
    } elseif ($posA !== false) {
        return -1; // A has priority
    } elseif ($posB !== false) {
        return 1; // B has priority
    } else {
        return $idA - $idB; // Sort by id
    }
});

print_r($matches);
  1. usort
    按优先级
    $matches
    id
    进行排序。
  2. 优先级:
    [7,45]
    先来
  3. Resr 按
    id
  4. 排序
© www.soinside.com 2019 - 2024. All rights reserved.