【发布时间】:2020-02-06 20:32:37
【问题描述】:
我有一个名字列表:
$array = array(
"Alberto",
"Bianca",
"Claudio",
"Douglas",
"Erica"
);
我想对这个列表进行随机排序以生成这样的 array_map:
$array = array(
"Alberto" => "Claudio",
"Bianca" => "Erica",
"Claudio" => "Douglas",
"Douglas" => "Bianca",
"Erica" => "Alberto"
);
有两个限制:
-
名称不能分配给自身,例如
"Claudio" => "Claudio"。 -
排序不能有不同的结果。换句话说,如果它在第一次运行时生成一个结果,那么它在所有其他运行时都必须生成相同的结果。
我正在考虑使用某种类型的哈希检查,但这并不能保证会为自己分配一个名称。
我尝试使用
rsort($array);
但是如果数组中的元素个数是奇数,这将不起作用,在我的示例中,我会在行中遇到问题
"Claudio" => "Claudio"
有没有什么方法可以在不违反这两个限制的情况下对这个名称列表进行排序?
【问题讨论】:
-
那么你是否真的需要某种“真正的”随机性来获得结果,或者那不是重要的部分?既然你说你试过
rsort,我会认为不是吗?然后你可以简单地将所有条目偏移一个——Alberto->Bianca、Bianca->Claudio……这可以使用一个简单的 for 循环来完成,并使用模数“环绕”索引变量。 -
实际上,我不需要结果的“真实”随机性。我将使用您的想法作为解决方案——Alberto->Bianca,Bianca->Claudio。谢谢。
标签: php arrays sorting shuffle name-collision