Как накопить массивы в цикле?

golos81

Новичок
Как накопить массивы в цикле?

Есть ф-ия, находит массив уникальных чисел из файла и возвращает его. Ф-я выполняется в цикле. Мне надо накопить массивы, которые возвращает ф-ия.

Если в цикле делаю print_r(имя_фии), то значения каждого массива выводятся последовательно. Если делаю в цикле $value[].=(имя_фии), т.е. не вывожу, а пытаюсь накапливать, и когда за границами цикла делаю print_r($value), то выводится "Array ( [0] => Array [1] => Array [2] => Array )" (для 3-х массивов).

Код:
PHP:
//скрипт
if ($handle = opendir($Path)) {
    $stop=0;
    while (false !== ($file = readdir($handle))) {
    	if ($file != "." && $file != "..") {
    		if ($stop==3) break(1);
        	$UniqNames[].=(GetUniqNames($file));
        	$stop++;
        }
    }
    closedir($handle);
    print_r($UniqNames);
}

//ф-я
function GetUniqNames ($FileName) {

	$sub="test/".$FileName;
	$FContent = file($sub);

	foreach ($FContent as $line) {

		$LineArr= explode('	', $line);
		if (!strpos($LineArr[3], "ext/html")) {
			$UniqArr[].= $LineArr[2];
		}
	}
	return(array_unique($UniqArr));
}
Подскажите как накопить в переменной значения массивов, отдаваемых ф-ей GetUniqNames()?
 

bgm

 
А зачем у тебя в присваивании нового элемента массива точка перед знаком равно присутствует?
 

Beavis

Banned
golos81
а ты чего ожидал? .= это вообще операция для работы со строками а не массивами, а массив переведенный в строку это и есть "Array", так что твоя программа работает правильно, а ты сам не знаешь чего понаписал
 

golos81

Новичок
Автор оригинала: *****
записывать их в массив?
Да, т.е. на выходе надо получить один массив, который бы содержал в себе все другие, полученные ф-ей GetUniqNames().
Т.е. вот это $UniqNames[].=(GetUniqNames($file)); вызывается несколько раз. И мне надо, чтобы в $UniqNames накопилось бы то, что возвращает ф-я GetUniqNames().

-~{}~ 22.12.07 16:18:

Автор оригинала: bgm
А зачем у тебя в присваивании нового элемента массива точка перед знаком равно присутствует?
Потому, что мне надо накопить. Если точку уберу, то получится, что запишется только последнее полученное значение.

-~{}~ 22.12.07 16:21:

Автор оригинала: Beavis
golos81
а ты чего ожидал? .= это вообще операция для работы со строками а не массивами, а массив переведенный в строку это и есть "Array", так что твоя программа работает правильно, а ты сам не знаешь чего понаписал
А как же тогда накопить? И кстати, в ф-ии это работает.
 

golos81

Новичок
Сделал вместо $UniqNames[].=(GetUniqNames($file)); array_push($UniqNames, GetUniqNames($file));. Все равно происходит не последовательное добавление элементов из других массивов в первый массив, а добавление новых массивов в элементы первого массива. Т.е. должно быть Array[0]=значение, значение, значение, ..., а получается Array ( [0] => Array ( [0] => значение [1] => значение ) [1] => Array ( [0] => значение [1] => значение [2] => значение [3] => значение [4] => значение [5] => значение ) [2] => Array ( [0] => значение [1] => значение [2] => значение [3] => значение ) )
 

Beavis

Banned
golos81
должно быть Array[0]=значение, значение, значение, ...,
тогда зачем тут массив, если тут всего один элемент? я понимаю ещё в С++ можно запутаться с массивами и строками, но ты, по-моему, умудрился это сделать и в PHP
 

golos81

Новичок
Автор оригинала: Beavis
golos81
должно быть Array[0]=значение, значение, значение, ...,
тогда зачем тут массив, если тут всего один элемент? я понимаю ещё в С++ можно запутаться с массивами и строками, но ты, по-моему, умудрился это сделать и в PHP
Я имел в виду, что элементы в массиве разные: Array[0]=значение1, значение2, значение3, ...

Я просто не могу понять, почему когда делаю:
PHP:
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);
то выводится то, что мне надо - Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry ), но если делаю array_push($UniqNames, GetUniqNames($file));, где $UniqNames - это аналогично $stack, а значения "apple", "raspberry" - аналогичны тому, что возвращает ф-я GetUniqNames(), то получается другой результат:((((((

Наткнулся вот на это - http://ru2.php.net/manual/ru/function.array-push.php#61217, кажется начинаю понимать...

Вот так работает - $UniqNames=array_merge($UniqNames, GetUniqNames($file));
 

Beavis

Banned
golos81
то тебе надо так Array[0]=значение1, значение2, значение3, ...
то тебе надо так Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )

ты только всех путаешь!!
 

golos81

Новичок
Автор оригинала: Beavis
golos81
то тебе надо так Array[0]=значение1, значение2, значение3, ...
то тебе надо так Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )

ты только всех путаешь!!
Ну извини, если что не так объяснил:)
 

Pigmeich

Новичок
golos81
Потому что PHP очень вольно обращается с числовыми ключами.

Есть брутфорс бьющий по производительности: использовать как ключи строки вида "1" и "2".
 

FractalizeR

Новичок
Я так понял, автору нужно заменить все его
PHP:
$UniqNames[].=(GetUniqNames($file));
на
PHP:
$UniqNames=array_merge($UniqNames, GetUniqNames($file));
Ну и $UniqArr[].= $LineArr[2]; тоже соответственно.
 

Фанат

oncle terrible
Команда форума
FractalizeR
тормозить не надо. Заменить надо было $UniqNames[]. на $UniqNames[]
И ВСЁ.
 

Beavis

Banned
Автор оригинала: golos81
Вот так работает - $UniqNames=array_merge($UniqNames, GetUniqNames($file));
Автор оригинала: FractalizeR
Я так понял, автору нужно заменить все его
PHP:
$UniqNames[].=(GetUniqNames($file));
на
PHP:
$UniqNames=array_merge($UniqNames, GetUniqNames($file));
странно, как же ты это понял...
 
Сверху