2011-12-23 38 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

相關問題