2013-10-28 4 views
0
$array1=["joe","bob"]; 
$array2=["tom","bill"]; 
$array3=["dan","mary"]; 

Я хочу распечатать каждую комбинацию .. like (joe, tom, dan), (joe, tom, mary), только выбирая 1 из каждого массива для каждой комбинации. и так далее, пока не будет больше комбинаций. После этого я хочу опубликовать их на 3 почтовых бланках на моем веб-сайте. Я знаю, как это сделать, но я застрял на этой комбинации.Найти комбинации из массивов

Трудно объяснить .. надеюсь, вы поняли ..

+0

Повторение позволено. ? –

+0

Да .. Я считаю, что перестановки были бы правильным термином для меня. – user2318029

ответ

0

Вы можете использовать 3 для петель:

$combinations = new ArrayObject(); 
foreach ($array1 as $name1) { 
    foreach ($array2 as $name2) { 
     foreach ($array3 as $name3) { 
      $combinations->append(array($name1, $name2, $name3)); 
     } 
    } 
} 
+0

var_dump ($ комбинации); Это дает мне большую сетку (http://gyazo.com/459a17ed0e456ec598e6fb3cb65cd77d). В любом случае, я мог бы отследить его как массив для каждой комбинации, так как я пытаюсь отправить каждый массив с помощью cURL? – user2318029

+0

Это массив массивов. Каждый массив представляет собой комбинацию [name1, name2, name3]. Это уже массив для каждой комбинации: '$ combination [0]' это первая комбинация, '$ комбинаций [1]' вторая и т. Д. Вы можете напечатать ее «хорошо», например, используя 'foreach ($ комбинации как $ c) {print join ($ c, ","). "\ П"; } ' – LeartS

+0

ВЫ - спасатель жизни. Не могли бы вы объяснить append()? Я не понимаю объяснения php.net. – user2318029

0

Когда нет репутации не допускается

<?php 

$array1=["joe","bob"]; 
$array2=["tom","bill"]; 
$array3=["dan","mary"]; 

$arr = array_merge($array1,$array2,$array3); 
$result = array(); 

function noRepeatation($arr, $temp_string, &$collect) { 
    if ($temp_string != "") 
     $collect []= $temp_string; 

    for ($i=0; $i<sizeof($arr);$i++) { 
     $arrcopy = $arr; 
     $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element 
     if (sizeof($arrcopy) > 0) { 
      noRepeatation($arrcopy, $temp_string ." " . $elem[0], $collect); 
     } else { 
      $collect []= $temp_string. " " . $elem[0]; 
     } 
    } 
} 

$collect = array(); 
noRepeatation($arr, "", $collect); 
print_r($collect); 
?> 

Когда репутация разрешена

<?php 
$array1=["joe","bob"]; 
$array2=["tom","bill"]; 
$array3=["dan","mary"]; 

$arr = array_merge($array1,$array2,$array3); 
$result = array(); 

function repeatation($arr, $level, &$result, $curr=array()) { 
    for($i = 0; $i < count($arr); $i++) { 
     $new = array_merge($curr, array($arr[$i])); 
     if($level == 1) { 
      sort($new); 
      if (!in_array($new, $result)) { 
       $result[] = $new;   
      } 
     } else { 
      repeatation($arr, $level - 1, $result, $new); 
     } 
    } 
} 

for ($i = 0; $i<count($arr); $i++) { 
    repeatation($arr, $i+1, $result); 
} 

foreach ($result as $arr) { 
    echo join(" ", $arr) . '<br>'; 
} 
?> 
+0

Оба вы так хороши! Хотел бы я дать вам и правильный ответ! – user2318029

+0

@ user2318029 вы также можете повысить, если хотите –

+0

Поверьте мне, я попробовал .. Мне нужно 15 репутации за это. – user2318029

Смежные вопросы