Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с накоплением в 2 - мерном массиве данных
 
 автор: Sl   (16.02.2007 в 09:37)   письмо автору
 
 

Приведу вам фрагмент программы

<?
if(count(glob("wbook/*.dat"))) # Если количество файлов с расширением .dat не равно нулю
{
    foreach(
glob("wbook/*.dat") as $path# Проходим по каждому файлу
    
{
        
$f fopen($path,"rt"); # Открываем текущий обрабатываемый файл
        
$users_stdata_read fread($f,1000); # Извлекаем строку
        
$users_person explode("|",$users_stdata_read,19);    # Создаем массив данных, где в каждой ячейке хранится значение, считанное из файла. Всего значений 19, разделенных символов '|'
        # Создаем массив $dataUsers, который должен накапливать данные по id ($users_person[0]) идентификатору файла
        
$dataUsers = array(
            
$users_person[0] => array('name' => $users_person[1], 'surname' => $users_person[2], 'otchestvo' => $users_person[3], 'age' => $users_person[4], 'year-live' => $users_person[5]
            , 
'icq' => $users_person[13], 'email' => $users_person[14])
        );
        
# Дальше идет код ...
        
fclose($f);
    }
}
?>

Проблема в том, что в массиве $dataUsers накапливаются только последние данные. Одним словом все время происходит перезапись их
Допустим у меня есть 3 файла. Программа их считывает. И вот в этом массиве должны находиться данные из этих 3 - ех файлов,
где $users_person[0], идентификатор записи, считанный из файла
Но происходит все совсем наоборот. В этот массив записываются данные только из последнего считываемого файла. Остальные, предыдущие данные почему-то
перезаписываются. Может быть я создаю каждый раз заного массив $dataUsers ?
Вот данные в массиве $dataUsers, после окончания обработки всех файлов

<?
Array # вывод массива $dataUsers
(
    [
2] => Array
        (
            [
name] => 1
            
[surname] => 2
            
[otchestvo] => 3
            
[age] => 4
            
[year-live] => 5
            
[icq] => Нет данных
            
[email] => Нет данных
        
)

)
?>

Как видно, в массиве $dataUsers записались данные только из последнего считывемого файла. Всего файлов было 2
Данные из 2-ого файла почему-то перезаписались на данные из 1-ого файла
Подскажите как это исправить ?

   
 
 автор: Trianon   (16.02.2007 в 10:19)   письмо автору
 
   для: Sl   (16.02.2007 в 09:37)
 


<? 
$dataUsers 
= array();
if(
count(glob("wbook/*.dat"))) # Если количество файлов с расширением .dat не равно нулю 

    foreach(
glob("wbook/*.dat") as $path# Проходим по каждому файлу 
    

        
$f fopen($path,"rt"); # Открываем текущий обрабатываемый файл 
        
$users_stdata_read fread($f,1000); # Извлекаем строку 
        
$users_person explode("|",$users_stdata_read,19);    # Создаем массив данных, где в каждой ячейке хранится значение, считанное из файла. Всего значений 19, разделенных символов '|' 
        # Создаем массив $dataUsers, который должен накапливать данные по id ($users_person[0]) идентификатору файла 
        
$dataUsers[$users_person[0]] = array('name' => $users_person[1], 'surname' => $users_person[2], 'otchestvo' => $users_person[3], 'age' => $users_person[4], 'year-live' => $users_person[5
            , 
'icq' => $users_person[13], 'email' => $users_person[14]) 
        ); 
        
# Дальше идет код ... 
        
fclose($f); 
    } 

print_r($dataUsers);
?> 

   
 
 автор: Sl   (16.02.2007 в 10:49)   письмо автору
 
   для: Trianon   (16.02.2007 в 10:19)
 

Спасибо, помогло =)
А в чем была моя ошибка ? Я создавал каждый раз новый массив ?

   
 
 автор: Trianon   (16.02.2007 в 10:53)   письмо автору
 
   для: Sl   (16.02.2007 в 10:49)
 

да. Затирая при этом предыдущий.
$var = ... затирает имеющееся значение.

   
 
 автор: Sl   (16.02.2007 в 11:15)   письмо автору
 
   для: Trianon   (16.02.2007 в 10:53)
 

Теперь понятно. Еще раз спасибо =)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования