Помогите с внесением данных в многомерный массив

Burgor

Новичок
Помогите с внесением данных в многомерный массив

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

Т.е. проблема состоит в том, что при каждом проходе он почему то затирает прошлые данные не пойму почему
PHP:
$file_name = array(1=>'children0_0.jpg','children1_0.jpg','children2_0.jpg','bath_room0_0.jpg','bath_room0_1.jpg');
  
$file_arr=array();
$i=0;
foreach ($file_name as $key=>$val  )
  {
    preg_match("/[a-zA-Z]*/i",$val, $name) ;
    foreach ($name as $key_name=>$val_name  ) {
    $i++;
    $file_arr[$val_name]=array( $i=> $val,);
  }
}
выводит следующий массив
Array
(
[children] => Array
(
[3] => children2_0.jpg
)
[bath] => Array
(
[5] => bath_room0_1.jpg
)
)
а я хотел получить массив такого рода
Array
(
[children] => Array
(
[1] => children0_0.jpg
[2] => children1_0.jpg
[3] => children2_0.jpg
)

[bath] => Array
(
[1] => bath_room0_0.jpg
[2] => bath_room0_1.jpg
)

)
Подскажите как это можно реализовать, не понимаю где и что сделал не так.
 

Фанат

oncle terrible
Команда форума
понимать не надо.
надо ПОСМОТРЕТЬ.
что у тебя в переменной $name?

-~{}~ 12.08.06 17:15:

попробуй вдумчиво прочитать вот этот текст: PHP FAQ: Ничего не работает! Что делать???
особенно - раздел "Отладка и поиск ошибок в своем алгоритме."

Это самое главное, что тебе нужно учить на данном этапе.
 

Фанат

oncle terrible
Команда форума
а, да.
ошибка у тебя в алгоритме.
что делает оператор $file_arr[$val_name]= ?
 

Burgor

Новичок
оператор $file_arr[$val_name]=
создаётся многмерный массив и именем $val_name( скажем сhildren )

Array
(
[children] => Array
(
[1] => children0_0.jpg
) )
 

Фанат

oncle terrible
Команда форума
ну а после того, как массив уже создан, что этот оператор делает?

-~{}~ 12.08.06 17:32:

и почему ты решил, что создаётся многомерный?
я тебя не спрашиваю, что делает оператор
$file_arr[$val_name]=array( $i=> $val,);
я тебя спросил, что делает оператор
$file_arr[$val_name]=
 

Burgor

Новичок
он добавляет в массив ( хотя скорее всего перезаписывает его т.к. имя массива уже существует) имя массива и имя файла

потому как $file_arr - это уже массив, и мы в этот массив вкладываем массив $val_name
 

Burgor

Новичок
понял, сначало думал что в массив по любому должен был добавляться, потом после нескольких тестов понял что он перезаписывает его
вот как раз в этом и есть вся проблема, уже 2й день думаю надо было сделать проверку на существование такого массива или нет, теперь вся ясно что нужно!!!!
 

Фанат

oncle terrible
Команда форума
а зачем тебе эта проверка?
ну сделаешь ты её, - а дальше?
 

Burgor

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

если имя $val_name существует я буду добавлять только имя файла к этому массиву

-~{}~ 12.08.06 20:35:

ну вот вроде дописал, и работает только всеравно не хочет добавлятьв массив

PHP:
$file_name = array(1=>'children0_0.jpg','children1_0.jpg','children2_0.jpg','bath_room0_0.jpg','bath_room0_1.jpg');
 $file_arr[$val_name]=array();
  $i=0;
  foreach ($file_name as $key=>$val  )
                    {
		preg_match("/[a-zA-Z]*/i",$val, $name) ;
                
                   foreach ($name as $key_name=>$val_name  )
              			{
              			      $i++;
              	 array_push($file_arr[$val_name][$i],$val);
              		   	            			
    						}
                     }
Array
(
[children] => Array
(
[1] =>
[2] =>
[3] =>
)

[bath] => Array
(
[4] =>
[5] =>
)
)

и пишет кучу варнингов по поводу array_push
 

Фанат

oncle terrible
Команда форума
ну не массив у тебя $file_arr[$val_name][$i]!

-~{}~ 12.08.06 21:09:

всё, что тебе нужно было - это почитать про массивы в мане [m]types.array[/m] и оператор []
 

Burgor

Новичок
Огромное спасибо все получилось
Просто читал в книжке, а там про это не написано поэтому не знал, а сам не догадался
надо было только объявить правильно
$file_arr[$val_name][]=array();

$file_arr[$val_name][$i]=$val;



только единственное я не пойму почему он создает самым первым массивом, пустой массив

почему то всегда думал что форма записи
PHP:
 $array=array($array1=>array());   //равноценна; 
$array[$array1]=array();
 
Сверху