- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
<?php
// Создаём функцию struktura_array (массив со значениями)
function struktura_array($mas) {
//Подсчитываем количество значений в массиве $mas
$col_el = count($mas);
//Подсчитываем количество всевозможных вариантов по формуле 2^n – 1, n = $col_el
$col_zn = pow(2,$col_el)-1;
//Делаем цикл до $i = $col_zn
for ($i=1; $i <= $col_zn; $i++) {
//выполняем преобразование числа $i в двоичную систему
$dlina_i_bin = decbin($i);
//Дописываем нули в левую часть на длину $col_el
$zap_str = str_pad($dlina_i_bin, $col_el, "0", STR_PAD_LEFT);
//Переворачиваем $zap_str
$zap_dop = strrev($zap_str);
$dooh = array();
//Преобразуем $zap_dop в массив вида Array (0=>"0", 1=>"1", 2=>"1", 3=>"0", 4=>"0")
for($j=0; $j < $col_el; $j++) {
$dooh[] = $zap_dop[$j];
}
//Обнуляем $d и $a чтоб при следующем проходе цикла они были пустыми
$d = 0; $a = "";
//Теперь самое интересное
//Итерируем по массиву $dooh и выдергиваем значения (либо 1 либо 0)
foreach ($dooh as $k=>$v) {
//Если выдернули 1 то в массив $a записываем значение с соответствующим ключом
if ($v == 1) {$a[] .= $mas[$d];}
//Увеличиваем ключ на единицу для перехода по массиву
$d++;
}
$return[] = $a;
}
return $return;
}