2011-06-14 118 views
11

例如,這是我的文字:生成單詞組合

$str = 'buy new microsoft windows'; 

我爆炸的文字和列表與數組:

Array 
(
    [0] => buy 
    [1] => new 
    [2] => microsoft 
    [3] => windows 
) 

我要生成陣列的話是這樣的:

buy new 
buy new windows 
buy microsoft 
buy microsoft windows 
buy windows 
new microsoft 
new microsoft windows 
new windows 
microsoft windows 

我嘗試使用foreach和rand,但是我無法像顯示那樣生成。是否有機會像我的要求一樣產生?

+4

是生成字隨機創建? 'windows new microsoft'會有效嗎? – insumity 2011-06-14 11:44:24

+1

你想*所有可能的排列*或只是*任何隨機組合*? – deceze 2011-06-14 11:48:50

+1

@Luzhin是的,他們是隨機創建的。其不重要的是有效的。 – Nulled 2011-06-14 11:48:56

回答

14

您可以在此PEAR PACKAGE 使用例子看看:

<?php 
require_once 'Math/Combinatorics.php'; 
$words = array('buy', 'new', 'microsoft'); 
$combinatorics = new Math_Combinatorics; 
foreach($combinatorics->permutations($words, 2) as $p) { 
    echo join(' ', $p), "\n"; 
} 

輸出將是:

buy new 
new buy 
buy microsoft 
microsoft buy 
new microsoft 
microsoft new 
+0

我正在做我自己的排列功能的例子,但這是更好的。:P – 2011-06-14 11:56:02

+0

是否有機會像我的要求一樣生成? – Nulled 2011-06-14 12:19:11

+0

你可以試試這個PEAR包裝。它提供了許多功能 – 2011-06-14 12:27:50

6
shuffle($array); 
echo join(' ', array_slice($array, 0, mt_rand(1, count($array)))); 

這給你一個隨機 「句子」。必要時重複。

+0

你能解釋怎樣才能列出出場機會? – Nulled 2011-06-14 14:20:28

3
 
function pc_permute($items, $perms = array()) { 
    if (empty($items)) { 
     print join(' ', $perms) . "\n"; 
    } else { 
     for ($i = count($items) - 1; $i >= 0; --$i) { 
      $newitems = $items; 
      $newperms = $perms; 
      list($foo) = array_splice($newitems, $i, 1); 
      array_unshift($newperms, $foo); 
      pc_permute($newitems, $newperms); 
     } 
    } 
} 

源:http://docstore.mik.ua/orelly/webprog/pcook/ch04_26.htm#phpckbk-CHP-4-EX-6

還檢查在該網站上下一示例


例如:pc_permute(explode(' ', 'buy new microsoft windows'));

 
buy new microsoft windows 
new buy microsoft windows 
buy microsoft new windows 
microsoft buy new windows 
new microsoft buy windows 
microsoft new buy windows 
buy new windows microsoft 
new buy windows microsoft 
buy windows new microsoft 
windows buy new microsoft 
new windows buy microsoft 
windows new buy microsoft 
buy microsoft windows new 
microsoft buy windows new 
buy windows microsoft new 
windows buy microsoft new 
microsoft windows buy new 
windows microsoft buy new 
new microsoft windows buy 
microsoft new windows buy 
new windows microsoft buy 
windows new microsoft buy 
microsoft windows new buy 
windows microsoft new buy 
+0

如何使用該代碼? – Nulled 2011-06-14 12:03:25

+0

您可以將輸出添加到您的答案嗎?評論有點難以閱讀;) – hakre 2011-06-14 12:13:52

+0

@hakre我忘了我可以編輯答案;) – 2011-06-14 12:22:58

2

php.net shuffle doc

實測值
function powerSet($in,$minLength = 1) { 
    $count = count($in); 
    $members = pow(2,$count); 
    $return = array(); 
    for ($i = 0; $i < $members; $i++) { 
     $b = sprintf("%0".$count."b",$i); 
     $out = array(); 
     for ($j = 0; $j < $count; $j++) { 
     if ($b{$j} == '1') $out[] = $in[$j]; 
     } 
     $out_val = implode(" ", $out); 
     if (count($out) >= $minLength) { 
     $return[] = $out_val; 
     } 
    } 
    return $return; 
} 

print_r(powerSet($str_arr)); 

,其結果將是,

Array 
(
    [0] => windows 
    [1] => microsoft 
    [2] => microsoft windows 
    [3] => new 
    [4] => new windows 
    [5] => new microsoft 
    [6] => new microsoft windows 
    [7] => buy 
    [8] => buy windows 
    [9] => buy microsoft 
    [10] => buy microsoft windows 
    [11] => buy new 
    [12] => buy new windows 
    [13] => buy new microsoft 
    [14] => buy new microsoft windows 
) 
+0

這應該是答案。這種優雅的解決方案也是如此。 – Magnum 2014-04-15 06:34:08

+0

電源組不包含反轉,例如,「windows new」不存在。 – Saeven 2016-09-15 02:26:26

+0

@Saeven這個問題不需要倒置,所以相應地回答。 – Paulraj 2016-09-15 06:45:53

0

對於所有可能的組合我提高@SujitAgarwal答:

下載Math_Combinatoeics

include_once 'Combinatorics.php'; 

$words = array('buy','microsoft','windows'); 
$count = count($words); 
$return = array(); 

$combinatorics = new Math_Combinatorics; 

for ($num=1; $num <= $count; $num++){ 
    foreach($combinatorics->permutations($words, $num) as $p) { 
    $return[] = join(' ', $p); 
    } 
} 

print_r($return); 

輸出:

Array 
(
    [0] => buy 
    [1] => microsoft 
    [2] => windows 
    [3] => buy microsoft 
    [4] => microsoft buy 
    [5] => buy windows 
    [6] => windows buy 
    [7] => microsoft windows 
    [8] => windows microsoft 
    [9] => buy microsoft windows 
    [10] => buy windows microsoft 
    [11] => microsoft windows buy 
    [12] => microsoft buy windows 
    [13] => windows buy microsoft 
    [14] => windows microsoft buy 
)