首页 > 解决方案 > 确保相同的数组项在 php 中不相邻

问题描述

我正在为这个案子而苦苦挣扎。我有一个随机数组,类似的项目可以彼此相邻,我不希望它发生。

例子 :

array("red","red","blue","green","green","blue");

Expected Output : array("red","blue","red","green","blue","green")

所以我正在考虑将这些项目洗牌,直到彼此相邻的项目中没有类似的项目。但是如果数组有很多值,会花费很多时间。

有什么有效的方法可以实现吗?

任何帮助,将不胜感激。谢谢

标签: phparraysshuffle

解决方案


只是一个想法:

  • 随机播放原始数组。
  • 比较前两个。如果它们相同,则将第二个与最后一个交换。
  • 移动到下一对。
  • 重复直到结束。

在这里,我们假设最坏的情况下洗牌具有相同的值。

$colors = ["red", "red", "blue", "blue", "green", "green"];

for ($i = 0; $i < count($colors) - 1; $i++) {
    if ($colors[$i] !== $colors[$i + 1]) continue;
    $last = $colors[count($colors) - 1];
    $colors[count($colors) - 1] = $colors[$i];
    $colors[$i + 1] = $last;
}

print_r($colors);

Array
(
    [0] => red
    [1] => green
    [2] => blue
    [3] => red
    [4] => green
    [5] => blue
)

推荐阅读