CrewCut
@CrewCut
Коплю силы на переезд в тропики

Как изменить данную функцию, чтобы выводилось не более Х элементов за один проход?

Долго искал подходящее мне решение (нужно было получить все возможные варианты перебора строкового массива), нашел рабочий вариант - stackoverflow.com/questions/10834393/php-how-to-ge...

Проблема в том, что функция предоставляет все возможные варианты. Никак не пойму как её нужно изменить, чтобы количество элементов массива в одном ответе не превышало заданного числа.

Например, у него в примере есть строка "Alpha Beta Gamma Sigma" - если я задам число 3, как ограничитель, то её не должно быть в результате работы функции, т.к. она является результатом объединения 4 элементов, что больше трёх. Подскажите, пожалуйста, как нужно правильно поправить код?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
alsopub
@alsopub
В рамках той программы - как-то так:
$array = array('Alpha', 'Beta', 'Gamma', 'Sigma');

function depth_picker($arr, $temp_string, &$collect, $len=0) {
	$max = 3;
	if ($len > $max) {
		return;
	}
	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) {
            depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect, $len+1);
        } elseif ($len < $max) {			
            $collect []= $temp_string. " " . $elem[0];
        }   
    }   
}

$collect = array();
depth_picker($array, "", $collect);
print_r($collect);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы