如何在PHP中使用数组

Cha*_*h M 1 php arrays

我在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的值,并且数组的所有值必须是唯一的.

请帮助我...从此将不胜感激.

谢谢.

cod*_*ing 5

基本算法将是这样的(描述比问题状态更一般,对于两个任意数组array1和array2,以及结果数组的任意所需长度):

  1. 构建array1中但不在array2中的元素数组
  2. 如果剩余列表和array2的元素计数合并小于所需长度:

    - >然后我们无法构建结果,只是没有足够的元素

  3. 从diff中构建一个由diff中的随机元素组成的数组,以达到所需的长度
  4. 结果,将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实际上会返回键; 但由于你的值是字符串和唯一的,我们可以简单地使用值作为键,并使用该技巧直接获取随机值.