Бьется массив

FireMaster

Guest
Бьется массив

Всем привет, возможно название темы и корявое но на ум ничего другого не пришло :) Собственно проблема в следующем: имеется класс, который парсит файлы (не шаблоны), файлы открываю вот так: file($file), далее управление передается функции со следующим кодом:
PHP:
foreach($con as $st) {
  $line = explode("\"", $st);
  for($i=0; $i<(count($line)); $i++) {
    $this->vars[$line['1']] = $line['3'];
  }
}
Здесь вообщем все понятно: используя explode внутри foreach`a разбиваю строки на подстроки. Здесь все ок, но затем мне требуется из этих полученных строк составить новый массив для последующей работы с ним и сохранить все это дело в член класса $this->vars. Написал цикл - но он работает не так как нужно, а именно выдаются только несколько последних строк, пробовал по разному и через внутренний foreach и еще там по всякому, получалось еще что строки выводятся в двойном или тройном экземпляре :( Может кто подскажет что не так, а то уже второй день голову ломаю... Заранее спасибо.
 

fixxxer

К.О.
Партнер клуба
Лучше задачу опиши.
Голова в 2 ночи отказывается сообразить в чем она состоит исходя из этого куска кода.
 

FireMaster

Guest
Ну собсна описал уже =) Ок, попробую еще раз. Написал класс. Задача класса - обрабатывать файлы, методы класса:
1) Открытие директории и чтение всех файлов оттуда
2) Открытие каждого файла и записывание всех строк в массив
3) Разбитие каждой строки из массива по символу через explode на подстроки
4) Выкидывание из подстрок ненужного а из нужного снова создать массив и поместить его в $this->vars для последующей с ним работы - вот задача. То как я ее реализовал это в том куске кода, насколько мне кажется он правильный, не понимаю почему массив из подстрок помещаемых в $this->vars получается "битым". =(
 

lucas

Guest
А так? ;) ;)

PHP:
foreach($con as $st)
{   $line = explode("\"", $st);
     $this->vars[$line[1]] = $line[3]; 
}
Таки непонятно, что делал вложенный фор...
 

Burunduk-13

[CBT], Старожил РНРClub'a
Можно сделать предположение, что этот код парсит файл конфигурации. что-нить типа
"name" = "Value string";
Как раз получается vars[$line[1]] = $line[3]

А не проще юзать готовое?
[m]parse_ini_file[/m]
 

FireMaster

Guest
2lucas Твой вариант это мой самый первый, потому что так по идее все и должно выглядеть, но вместо этого идут те же самые повторения строк причем абсолютно по рэндому, т.е. некоторые повторяются по 7 раз а некоторые только по 2-3... мистика =) А вложенный for это я уже потом дописал, потому что уже не знал что делать и стал пробовать всякую бредятину в надежде что оно заработает, но оно так и не заработало...
2Burunduk-13 Нет, это не конфигурационный файл, и в строках содержатся не только name = value, а еще куча другой фигни, которую я обрезаю, а name = value, это то что требуется получить мне, и засунуть в массив, казалось бы элементарно, но то что получается - это полный бред...
 

FireMaster

Guest
Вот еще некоторые исследования...
Если сюда
PHP:
foreach($con as $st) {
  $line = explode("\"", $st);
  $this->vars[$line[1]] = $line[3];
}
добавить еще и вывод в браузер, т.е. вот так:
PHP:
foreach($con as $st) {
  $line = explode("\"", $st);
  $this->vars[$line[1]] = $line[3];
  foreach($this->vars as $key=>$value) {
    echo $key . " = " . $value . "<br>";
  }
}
то идут повторения строк, причем по рэндому, а если сделать так:
PHP:
foreach($con as $st) {
  $line = explode("\"", $st);
  $this->vars[$line[1]] = $line[3];
}
и потом выводить элементы массива через другую функцию, например:
PHP:
function test() {
  foreach($this->vars as $key=>$value) {
    echo $key . " = " . $value . "<br>";
 }
}
то выводятся только последние элементы около 40 штук, а все первые пропадают неизвестно куда.
 

lucas

Guest
Продолжаем телепатить... ;) ;)

выводятся только последние элементы около 40 штук, а все первые пропадают неизвестно куда
Наверно, это происходит, если значения $line[1] повторяются: новые пары ключ => значение затирают старые.

Приведи пример файла, который надо распарсить, и подробно опиши, как это надо сделать.
 

Burunduk-13

[CBT], Старожил РНРClub'a
Приведи пример строки, пожалуйста, которую ты парсишь, а то совсем ничего не понятно...
 
Сверху