2011-06-16 60 views
0

一個陣列是隨機加入兩個PHP數組?

Array ( 
[0] => love 
[1] => home 
[2] => google 
[3] => money 
) 

,另一個是

Array ( 
[0] => 111 
[1] => 222 
[2] => 333 
[3] => 444 
[4] => 555 
[5] => 666 
[6] => 777 
[7] => 888 
) 

我要讓3TH陣列看起來像這樣:

Array ( 
[love] => 111 
[google] => 222 
[home] => 333 
[love] => 444 
[google] => 555 
[money] => 666 
[money] => 777 
[google] => 888 
) 

所以,應該隨機選擇一些元素第一個數組並將它們連接到第二個中的所有元素。

+7

你的結果是不可能的 - 那裏有重複的數組鍵。 – 2011-06-16 19:30:42

+2

你的最終數組實際上並不是一個有效的數組。使用相同的密鑰不能有多個條目。 – 2011-06-16 19:31:04

+0

您的輸出陣列具有每個密鑰的多個副本。你不能那樣做,因爲你只會覆蓋相同的密鑰。 – 2011-06-16 19:31:15

回答

0

試試這個:

$numbers = Array ( 
[0] => 111 
[1] => 222 
[2] => 333 
[3] => 444 
[4] => 555 
[5] => 666 
[6] => 777 
[7] => 888 
); 

$text = Array ( 
[0] => love 
[1] => home 
[2] => google 
[3] => money 
); 
$new_array = array(); 
foreach($numbers as $value){ 
    $new_array 
} 

我正要嘗試這種話,我記住了。陣列密鑰必須是唯一 - 換句話說,您不能不能在陣列中有2個元素具有相同的密鑰。

0

array_combine將用於鍵一個陣列和一個用於值:http://www.php.net/manual/en/function.array-combine.php

$keys = array ( 
    'love', 
    'home', 
    'google', 
    'money' 
); 
$vals = array ( 
111, 
222, 
333, 
444, 
555, 
666, 
777, 
888 
); 
$output = array_combine($keys, $vals); 

這不是隨機的,雖然。隨機需要​​一個循環:

$output = array(); 
foreach ($keys as $k) { 
$output[$k] = $vals[array_rand($vals)]; 
} 


    /* output: 
Array 
(
    [love] => 666 
    [home] => 555 
    [google] => 222 
    [money] => 777 
) 
*/ 

鍵盤:http://codepad.org/7c55LvXg

另一種方法,使用shuffle到陣列混合起來。這似乎產生最好的結果:

shuffle($keys); 
shuffle($vals); 
$output = array(); 
while (count($keys) > 0 && count($vals) > 0) { 
    $key = array_pop($keys); 
    $output[$key] = array_pop($vals); 
} 

/* output: 
Array 
(
    [love] => 555 
    [money] => 777 
    [home] => 444 
    [google] => 333 
) 
*/ 

鍵盤的最後一個:http://codepad.org/BpM8RzD3

1

像所有的評論中提到,你的最後一個數組是不可能的。 你可以做什麼會是這樣的:

finalArray = Array (
    [0] => [google] => 111 
    [1] => [home] => 222 
    [2] => [google] => 333 
    ... 
) 

你可以achvieve這就像這樣(使用array_rand隨機數組值):

$array3 = array(); 
foreach ($array2 as $element) { 
    $array3[] = array($element => $array1[array_rand($array1)]); 
} 
1

如前所述,創建這樣的數組不可能的,但你可以做這樣的事情:

$words = array('love', 'home', 'google', 'money'); 
$numbers = array(111, 222, 333, 444, 555, 666, 777, 888); 
$result = array(); 
foreach($words as $word){ 
    $result[$word] = array(); 
} 
$wordsmax = count($words) - 1; 
foreach($numbers as $number){ 
    $result[$words[rand(0,$wordsmax)]][] = $number; 
} 

這可能輸出類似:

Array (
    [love] => Array (
      [0] => 222 
      [1] => 888 
     ) 
    [home] => Array (
      [0] => 555 
      [1] => 666 
      [2] => 777 
     ) 
    [google] => Array (
      [0] => 333 
     ) 
    [money] => Array (
      [0] => 111 
      [1] => 444 
     ) 
)