2013-03-06 3 views
3

У меня есть массив из 10 чисел. Я хотел бы, чтобы все комбинации из трех чисел были доступны из 10. Однако заказ не имеет отношения к делу. То есть я не хочу, чтобы комбинации одинаковых чисел в другом порядке (после генерации 1,2,3 2,3,1 не должны появляться). Кроме того, числа не должны повторяться в комбинации (т. Е. Нет 1,1,1). Я знаю, как создать таблицу с foreach, но я зациклился на том, как создавать возможные комбинации. Спасибо за помощь!Комбинация массива в таблице

+0

Можете ли вы показать нам некоторые примеры комбинаций? –

+0

1,2,3 1,4,3 1,5,3 1,6,3 1,7,3 и т. Д. – Duncan

+0

Ваш вопрос не является хорошим вопросом. Ваш вопрос не показывает никаких усилий, чтобы найти ответ, то, что вы пробовали, или то, что вы пытаетесь достичь (помимо выполнения домашней работы, моя догадка). Взгляните на предлагаемые возможные дубликаты, которые, я уверен, касаются вашей конкретной проблемы. Если нет, объясните, почему. – ExternalUse

ответ

0

Хорошим подходом является использование array_unique() для удаления дубликатов из вашего массива. Затем каждый раз, когда вы используете элемент, вы должны поместить его с помощью array_pop(), чтобы он больше не использовался.

0

Номера не могут быть повторены, то это означает, что 1,2,1 также не разрешено? Если это так, в качестве первого шага удалите все повторяющиеся числа в заданном наборе, как предполагает тупик. Затем используйте алгоритм для поиска комбинаций. Многие такие алгоритмы рассматриваются в «дубликате» вопросов, предложенных другими пользователями.

0

заимствование из user187291 «s ответ here, с некоторыми изменениями, чтобы удовлетворить ваши потребности, следующее должно быть то, что вы хотите:

$a = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 

$len = count($a); 
$list = array(); 

for($i = 1; $i < (1 << $len); $i++) { 
    $c = ''; 
    for($j = 0; $j < $len; $j++) 
     if($i & (1 << $j)) 
      $c .= ',' . $a[$j]; 
    $list[] = ltrim($c, ','); 
} 

$answer = array(); 

foreach ($list as $comb) 
{ 

    if (3 == count(explode(',', $comb))) 
    { 
    $answer[] = $comb; 
    } 

} 

echo '<pre>' . print_r($answer, true); 
Смежные вопросы