PHP:玩家列表重排后如何还原数组初始随机分配顺序?
游戏数组分配与还原问题
场景背景
在一款在线游戏的PHP开发流程中,我们会先创建一个包含A-Z、0-9共36个元素的数组,再通过随机脚本打乱数组的原有顺序,示例如下:
[0] R [1] 4 [2] N [3] d ... [35] 8
随后使用PHP的chunk($arr,6)函数将打乱后的数组分块,为6名玩家各分配6个标识,示例如下:
Player 1 [0] = [R,4,n,d,O,M] Player 2 [1] = [p,2,s,Z,k,u] ... Player 6 [5] = [J,r,V,5,z,8]
核心问题
当玩家列表按字母顺序重新排序后,是否存在算法可以还原出最初的玩家-标识分配状态?
简化示例拆解
为了更清晰地分析问题,我们用一个简化的小示例来演示整个逻辑:
初始数组
[0] = abc [1] = def [2] = ghi [3] = jkl [4] = mno [5] = pqr
随机置换过程
原数组的索引顺序[0,1,2,3,4,5]被随机置换为[2,5,0,3,1,4],置换后的数组结构如下:
[2] = ghi [5] = pqr [0] = abc [3] = jkl [1] = def [4] = mno
置换后的索引与原索引的对应关系:
new order [0] [1] [2] [3] [4] [5] value ghi pqr abc jkl def mno former order [2] [5] [0] [3] [1] [4] -> 随机置换后各位置对应的原数组索引
目标还原状态
要还原到初始的数组顺序,我们需要得到一个索引映射数组[2,4,0,3,5,1],对应的数组状态如下:
new order [2] [4] [0] [3] [5] [1] value abc def ghi jkl mno pqr -> 回到初始数组的元素顺序
关键疑问
如何从随机置换得到的索引数组[2,5,0,3,1,4],推导出用于还原的目标索引数组[2,4,0,3,5,1]?
内容的提问来源于stack exchange,提问作者Wolden
相关产品推荐
相关产品推荐

