如何在Symfony中对卡片进行排序



我是symfony的初学者,我想按照以下顺序对(SYMFONY3(10cards手牌(随机给用户(进行排序: 类别顺序:钻石 – 心形 – 黑桃 – 俱乐部。 值顺序:AS – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 – 10 – 杰克 – 女王 – 国王。 例如:我通过JSON文件恢复用户的10张随机卡:

{ 
"cards":[ 
{ 
"category":"DIAMOND",
"value":"TEN"
},
{ 
"category":"CLUB",
"value":"ACE"
},
{ 
"category":"DIAMOND",
"value":"QUEEN"
},
{ 
"category":"SPADES",
"value":"SEVEN"
},
{ 
"category":"DIAMOND",
"value":"NINE"
},
{ 
"category":"HEART",
"value":"QUEEN"
},
{ 
"category":"CLUB",
"value":"TEN"
},
{ 
"category":"HEART",
"value":"FIVE"
},
{ 
"category":"HEART",
"value":"SEVEN"
}
]
}

排序后的牌变成:王牌俱乐部/五心/六心/七心/七黑桃/九钻/十钻/十俱乐部/皇后钻石/皇后心 我不知道如何开始?

在这种情况下,您可以做的是使用usort(),然后应用您的逻辑。在这种情况下,我有两个类别和值数组及其顺序。您可以在下面看到usort函数,它通过两个数组的索引比较值。你可以使函数更小,但我这样写是为了更好地理解:

<?php
$category_order = ["CLUB", "SPADES", "HEART", "DIAMOND"];
$value_order = ["ACE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "JACK", "QUEEN", "KING"];

$input = '{ 
"cards":[ 
{ 
"category":"DIAMOND",
"value":"TEN"
},
{ 
"category":"CLUB",
"value":"ACE"
},
{ 
"category":"DIAMOND",
"value":"QUEEN"
},
{ 
"category":"SPADES",
"value":"SEVEN"
},
{ 
"category":"DIAMOND",
"value":"NINE"
},
{ 
"category":"HEART",
"value":"QUEEN"
},
{ 
"category":"CLUB",
"value":"TEN"
},
{ 
"category":"HEART",
"value":"FIVE"
},
{ 
"category":"HEART",
"value":"SEVEN"
}
]
}';

$input = json_decode($input, true);
$cards = $input["cards"];
usort($cards, function($a, $b) use ($category_order, $value_order) {
if (array_search($a['category'], $category_order) > array_search($b['category'], $category_order)) {
return 1;
} elseif (array_search($a['category'], $category_order) == array_search($b['category'], $category_order)) {
if(array_search($a['value'], $value_order) > array_search($b['value'], $value_order)) {
return 1;
} else {
return -1;
}
} else {
return -1;
}
});
print_r($cards);

输出:

Array
(
[0] => Array
(
[category] => CLUB
[value] => ACE
)
[1] => Array
(
[category] => CLUB
[value] => TEN
)
[2] => Array
(
[category] => SPADES
[value] => SEVEN
)
[3] => Array
(
[category] => HEART
[value] => FIVE
)
[4] => Array
(
[category] => HEART
[value] => SEVEN
)
[5] => Array
(
[category] => HEART
[value] => QUEEN
)
[6] => Array
(
[category] => DIAMOND
[value] => NINE
)
[7] => Array
(
[category] => DIAMOND
[value] => TEN
)
[8] => Array
(
[category] => DIAMOND
[value] => QUEEN
)
)

最新更新