我在PHP中安排一个数组时遇到了这个问题.请帮帮我.以下是我正在使用的简要代码.
$array1 = array("image_1.png","image_2.png","image_3.png","image_4.png","image_5.png","image_6.png","image_7.png");
$array2 = $record['image_4.png'];
Run Code Online (Sandbox Code Playgroud)
现在看看我想要在最终数组中;
$arrFinal = array("image_6.png","image_4.png","image_2.png","image_3.png");
Run Code Online (Sandbox Code Playgroud)
以下是上述结果的基础: 我希望结果中的数组只有4个随机值的array1.但它必须具有array2的值,并且数组的所有值必须是唯一的.
请帮助我...从此将不胜感激.
谢谢.
基本算法将是这样的(描述比问题状态更一般,对于两个任意数组array1和array2,以及结果数组的任意所需长度):
如果剩余列表和array2的元素计数合并小于所需长度:
- >然后我们无法构建结果,只是没有足够的元素
在PHP中,这将是这样的(假设$array2实际上是一个数组,从问题中显示的代码不是100%清除):
// if you're not sure that $array1 and $array 2 only hold unique values, do this:
$array1 = array_unique($array1);
$array2 = array_unique($array2);
// actual algorithm:
$DesiredLength = 4; // can be passed in as parameter or defined as constant
$diffarray = array_diff($array1, $array2);
if (count($diffarray) + count($array2) < $DesiredLength) {
echo "Impossible, not enough unique elements!";
}
$randarray = array_rand(array_flip($diffarray), $DesiredLength - count($array2));
$arrFinal = array_merge($randarray, $array2);
Run Code Online (Sandbox Code Playgroud)
从其他答案中获得一些灵感(array_rand,array_merge).为了解释为什么array_flip要这样做,请参阅array_rand文档 - array_rand实际上会返回键; 但由于你的值是字符串和唯一的,我们可以简单地使用值作为键,并使用该技巧直接获取随机值.
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |