2016-03-24 2 views
-1

Хорошо, я почти закончил свой сценарий, но мой результат не совсем так, как предполагалось. Задача сценариев состоит в создании всех возможных комбинаций чисел из суммы всех многомерных ключей массива. Ive отредактировал несколько сценариев и объединил их в одном скрипте, но я не могу получить желаемый результат.PHP вывод всех возможных комбинаций чисел

Хорошо, например, позволяет сказать, что у меня есть массив, как этот:

$test = array(0 => array(53, 22, 12), 
    1 => array(94, 84, 94), 
    2 => array(56, 45, 104) 
); 

Затем Принести ключи массива и хранить их в новом массиве:

foreach ($test as $key => $row) { 
    $output[] = count($row);   
}          
for($keycount = 1; $keycount <= count($output); $keycount++){ 
    $newarray[$keycount] = $keycount; 
} 

А потом я рассчитывать ключи вновь созданный массив, поэтому окончательная комбинация основана на этом числе. В вышеупомянутом примере, у меня есть 3 комбинации, поэтому окончательный массив должен выглядеть следующим образом:

111 
211 
311 
121 
221 
321 
131 
231 
331 
112 
. 
. 
. 
333 

Но с моим сценарием:

$arraycount = count($newarray); 
$maxcombinations = pow($arraycount, $arraycount); 
$return = array(); 
$conversion = array(); 
foreach ($newarray as $key => $value) { 
    $conversion[] = $key; 
} 
for ($i = 0; $i < $maxcombinations; $i++) { 
    $combination = base_convert($i, 10, $arraycount); 
    $combination = str_pad($combination, $arraycount, "0", STR_PAD_BOTH); 
    $return[$i][] = substr(strtr($combination, $conversion), 1, $arraycount); 
}  
echo "<pre>".print_r($return, true)."</pre>"; 

Я получаю вывода, как это:

Array 
(
[0] => Array 
    (
     [0] => 111 
    ) 

[1] => Array 
    (
     [0] => 121 
    ) 

[2] => Array 
    (
     [0] => 131 
    ) 

[3] => Array 
    (
     [0] => 211 
    ) 

[4] => Array 
    (
     [0] => 221 
    ) 

[5] => Array 
    (
     [0] => 231 
    ) 

[6] => Array 
    (
     [0] => 311 
    ) 
+4

Возможный дубликат [Как получить все возможные комбинации многомерного массива] (http://stackoverflow.com/questions/15101494/how-to-get- all-possible-combination-of-multimimensional-array) – mitkosoft

+0

Я не думаю, что вы можете классифицировать эту тему как дубликат, поскольку он использует фиксированные ключи и значения. – Greedy

+0

Очевидно, вы используете двумерный массив '$ return [$ i] []'. Если каждая запись имеет ровно одно значение, вы можете использовать вместо этого '$ return [$ i] =' или '$ return [] ='. – LSerni

ответ

0

вы используете массив как $ возврата [$ я] [] Таким образом, вы получаете свой вывод как неожиданный

Попробуйте

$return[$i] = substr(strtr($combination, $conversion), 1, $arraycount); 

Вместо

$return[$i][] = substr(strtr($combination, $conversion), 1, $arraycount); 
+0

Thx, но это только изменяет конфигурацию массива, комбинация номеров все тот же. – Greedy

+0

Вы можете достичь ожидаемого результата, изменив удаление дополнительных [] –

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