Intereting Posts
«Количество столбцов не соответствует количеству значений в строке 1» Как я могу проверить правильность выбора пользователя в викторине? Как мне отобразить информацию об ошибке внутреннего сервера PHP? Использование метода модели Laravel в запросе Eloquent Автоматическое увеличение числа в img src защищать доступ к файлу пользователей, доступ к которому может получить только владелец? как удалить файлы с удаленного сервера с помощью phpStorm php autoload: дублирование соединения db Есть ли эквивалентная функция, которая возвращает символ в позиции `X` в PHP? php curl localhost медленен при выполнении параллельных запросов Как я могу убедиться, что lastInsertId () не относится к другой одновременной вставке? удалить элемент из xml Где следует хранить конфигурацию, зависящую от среды, в приложении Zend Framework 2? Возвращает ограниченное количество записей определенного типа, но неограниченное количество других записей? Пропустить массив с помощью ключей через HTTP GET

2 независимых события 3 раза – перечисляют возможные результаты

Я огляделся, но я не мог найти ничего подходящего для этого.

$n = 3;//number of events $k = array(0,1);//possible outcomes 

Я хотел бы иметь массив, содержащий все возможные результаты:

 $result = array([0] => array(0,0,0), [1] => array(1,0,0)... [7] =>array(1,1,1)); 

Я пробовал этот длинный и статический метод, который не приносит мне ничего полезного:

 for($a=0;$a<count($k);$a++) { for($b=0;$b<count($k);$b++) { for($c=0;$c<count($k);$c++) { $push = array($a,$b,$c); array_push($result,$push); }}} 

Как я могу переписать это, чтобы получить функцию, учитывающую значение n? Поэтому, если я изменяю значение $ n до 4, я получаю массив вроде:

 $result = array([0] => array(0,0,0,0), [1] => array(1,0,0,0)... [15] =>array(1,1,1,1)); 

    Related of "2 независимых события 3 раза – перечисляют возможные результаты"

    Ключ здесь – рекурсивный вызов.

     <?php function gen($n, $k) { if ($n == 1) { // Base case $out = array(); foreach ($k as $elem) { array_push($out, array($elem)); } return $out; } $out = array(); foreach ($k as $elem) { // Recursive call $prev = gen($n - 1, $k); foreach ($prev as $rec) { array_push($rec, $elem); array_push($out, $rec); } } return $out; } print_r(gen(4, array(0,1))); ?> 

    Это приведет к созданию массива по одному уровню за каждый рекурсивный вызов.

    Это то, что вы хотите?

     $n = 3; $arr = array(); for ($i=0; $i<pow(2,$n); $i++) { $s = str_pad(decbin($i), 3, "0", STR_PAD_LEFT); $a = array_reverse(preg_split('//', $s, -1, PREG_SPLIT_NO_EMPTY)); $arr[] = $a; } print_r($arr);