2011-12-23 53 views
1

我在PHP中安排一个数组时遇到了问题。请帮助我。 下面是我正在使用的简短代码。如何在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']; 

现在看看我想要在最后的数组中;

$arrFinal = array("image_6.png","image_4.png","image_2.png","image_3.png"); 

下面是上述结果的丰达:我想在结果的阵列,其中它仅具有4 ARRAY1的随机值。但它必须具有array2的值,并且数组的所有值必须是唯一的。

请帮我从这个..这将不胜感激。

谢谢。

+2

什么是基础? – Herbert 2011-12-23 11:52:24

+0

@Herbert:http://en.wiktionary.org/wiki/funda – 2011-12-23 11:53:45

+0

我已经尝试所有主要的函数为array:array_rand(),array_unique()和array_merge(),但找不到真正的方法..Thx – Chandresh 2011-12-23 11:53:50

回答

4

array_rand()

你需要先在array1删除数组2:

$newarray = array_diff($array1,$array2); 

所以,你会选择3分随机的:

$temparray = array_rand(array_flip($newarray),3); // note array_flip will allow this to return the value, not the keys. 

然后在数组2添加:

$arrFinal = array_merge($temparray,$array2); 

然后,如果你想他们在一个随机的顺序只是使用

shuffle($arrFinal); 
+0

最终数组的唯一性如何?我不认为它创建唯一的数组.. – Chandresh 2011-12-23 12:14:08

+0

只要你开始的数组($ array1,$ array2)只保存唯一的元素,最终的数组将保存唯一的元素。 – codeling 2011-12-23 12:16:56

+0

两者都有独特的元素,但如果合并后会发生什么。 ? array1包含array2的元素也..所以 – Chandresh 2011-12-23 12:18:57

5

基本算法会是这样的(描述稍微比问题状态的更多一般地,对于任意两个阵列ARRAY1和数组2,以及用于将得到的阵列的任意期望的长度):

  1. 构建的阵列>然后,我们就无法构建的结果,但只是没有足够的 -

    :这是在阵列1,但不是在数组2

  2. 如果剩余的名单和元素计数数组2组合比期望的长度较小的元素元素

  3. 构建一个阵列,其中包含从array2中丢失的任意数量的随机元素,以达到所需长度
  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); 

与其他一些灵感答案(array_randarray_merge)。为了解释为什么array_flip完成,请参阅array_rand文档 - array_rand实际上将返回键;但由于你的值是字符串和唯一的,我们可以简单地使用这些值作为关键字,并且可以直接获得随机值。

+0

感谢您的回复。 – Chandresh 2011-12-23 12:01:40

1

首先,您应该从源数组中手动​​删除要输入到结果中的元素。然后你可以使用shuffle()随机化数组,然后从混洗数组中选择任意数量的元素...

+1

您可能想要在第一个数组上运行array_unique()以确保没有重复项。 – 2011-12-23 11:54:48

+0

+1 ..感谢您的回复。 – Chandresh 2011-12-23 12:00:53

2
$requried = 4; 
$arrFinal = $array2; 

$array1_2 = array_diff($array1, $array2); 

shuffle($array1_2); 
$i= count($arrFinal); 
$j=0; 

while($i<$required){ 
    $arrFinal[] = $array1_2[$j]; 
    $i++; 
    $j++; 
    if($j==count($array1_2)) break; 
} 

我毫不怀疑,这是可以收拾,但希望它是作为在正确的方向轻推的。

供参考,php手册页:array_randarray_diffshufflecount