php - 确保相同的数组项在 php 中不相邻
问题描述
我正在为这个案子而苦苦挣扎。我有一个随机数组,类似的项目可以彼此相邻,我不希望它发生。
例子 :
array("red","red","blue","green","green","blue");
Expected Output : array("red","blue","red","green","blue","green")
所以我正在考虑将这些项目洗牌,直到彼此相邻的项目中没有类似的项目。但是如果数组有很多值,会花费很多时间。
有什么有效的方法可以实现吗?
任何帮助,将不胜感激。谢谢
解决方案
只是一个想法:
- 随机播放原始数组。
- 比较前两个。如果它们相同,则将第二个与最后一个交换。
- 移动到下一对。
- 重复直到结束。
在这里,我们假设最坏的情况下洗牌具有相同的值。
$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
)
推荐阅读
- r - 如何将 S3 中的文件(不是 .csv 文件)读入 rstudio 和 AWS
- python - Python 类型错误:“模块”对象不可调用
- substrate - 如何通过“.entries”查询基板存储以获取部分项目
- c# - 如何停止协程的一个特定实例
- rust - polkadot.js api中的编码结构
- ansible - Ansible 'aws_secret' 查找变量
- c - 请有人用 C 语言解释一下这段代码
- javascript - jQuery 选择器仅适用于在 Laravel 刀片中加载时生成的元素
- python - 我的 python 脚本会在 VPS 上运行而不更改其中的任何内容吗?
- python - 在 django 中发布 textarea 内容时出现 IngerityError