Как сложить все значения неизвестного числа массивов

qru

Новичок
rotoZOOM, спасибо сейчас изучу... А то что-то не получается у меня разобраться пока с этой интересной темой.

Жаль там не на php чет запутано получается..

-~{}~ 18.11.08 19:06:

Ну вроде бы сделал.. Немножко криво наверное.. Но вроде работает.. Пока на вывод, но сейчас сделаю чтобы в массив сохранялось..

PHP:
##########################################
function gen_slov($mas, $i=0, $bukva="")
##########################################
	{

foreach ($mas[$i] as $key[$i] => $bukva[$i])		
		{	
if ($mas[$i+1]) // если есть следующая буква (след массив)
			{			
gen_slov($mas, $i+1, $bukva); // повторяем для следующего, массив уже полученных букв храним в памяти ($bukva)
			}
else	// если собрали уже все количество букв	
			{
foreach ($bukva as $k => $bukvaval) // выводим все буквы по порядку
				{	
echo "$bukvaval";	
				}
echo "<br />";
			}
		}
	}	
##########################################Вызов:
gen_slov($mas);
-~{}~ 18.11.08 19:39:

Не могу теперь понять как сделать return результатов из рекурсивной фунции. Echo то делается хорошо.. А вот сохранение результатов в массив никак не получается.. Может поможете?
 

Crys

Двинутый новичок
а как насчет дополнительной переменной (которая будет по ссылке передаваться) как третий параметр функции?
твой код не запускал, насколько понимаю, когда ты <br /> выводишь - значит слово в этом месте можешь собрать.. вот и добавляй его в массив...
 

qru

Новичок
Crys, все верно.. Только вот не знаю как бы это слово вывести.. Если собираю там слово (а точнее там несколько слов за раз собираются) как их передать в массиве на верх да еще и сделать так чтобы они в массив слов в конец добавились..

Если просто сделать


PHP:
##########################################
function gen_slov($mas, $i=0, $bukva="")
##########################################
	{

foreach ($mas[$i] as $key[$i] => $bukva[$i])		
		{	
if ($mas[$i+1]) // если есть следующая буква (след массив)
			{			
gen_slov($mas, $i+1, $bukva); // повторяем для следующего, массив уже полученных букв храним в памяти ($bukva)
			}
else	// если собрали уже все количество букв	
			{
foreach ($bukva as $k => $bukvaval) // выводим все буквы по порядку
				{
$temp .= $bukvaval;
PHP:
                                                                 }
$domen[] = $temp;
echo "$temp<br />";
$temp = "";
PHP:
                                                  }
		}
	}	
##########################################
то индексы массива будут просто заменяться каждый раз при вызове функцией самой себя. Тоже самое если возвращать этот массив и приравнивать то что выдает функция массиву переменной (там где она вызывается из самой себя). В общем чет я конкретно запутался..

-~{}~ 19.11.08 22:42:

Так и не решил проблему.. Жаль некому помочь с этими странными функциями.. не понимаю как делать return при вызове функцией самой себя.
 

dimagolov

Новичок
не понимаю как делать return при вызове функцией самой себя.
так же как и любой другой, использовать для построения нужной структуры. любая ф-я принимает параметры и возвращает результат. в чисто функциональном программировании ф-я не обращается ни к каким глобальным или статическим переменным, не изменяет для вызывающего никакие параметры, просто возвращает результат, который используется вызывающим.
 

qru

Новичок
Вот именно что никакой глобальной переменной для всей функции включая внутренние вызовы нет.. И не понятно как к ним обратиться..

У меня формируется функцией при внутренем вызове массив, потом еще один, и еще.. А мне то нужно чтобы был всего один массив. Я пытался даже складывать эти массивы получаемые во внутрених вызовах. По разному в том числе array_merge_recursive() - но что-то никак не получается получить простой массив с элементами по порядку..

Мне больше всего мешает что не получается добавлять элемент в массива через вызов masxxx[] без параметра в [] как в обычной функции (т.к. об этом массиве при самовызове функция не знает каждый раз)..

-~{}~ 20.11.08 01:51:

Все вроде догнал.. Пока писал осенило, что надо делать просто вызов так $masxxx= gen_slov($mas, $i+1, $bukva, $masxxx); тогда masxxx[] будет наполняться с каждым вызовом. Спасибо, dimagolov, помог догнать..
 
Сверху