2014-10-08 5 views
0

В настоящее время я пытаюсь прочитать входной файл, который выглядит следующим образом:Расщепление текстовый файл с разделителями табуляцией в многомерный ассоциативный массив

annie Tuesday October 7 at 08:32 pm 1 Cappuccino 2.5 

Он разделителями табуляцией. Я пытаюсь прочитать из этого файла, называемый orders.txt, и поместить его в массив ассоциативных массивов $. Это код, который у меня есть до сих пор. Я пробовал несколько разных версий, но не играл в кости.

function read_file() { 
     $file = "orders.txt"; 
     $array = array(); 
     if(file_exists($file)) { 
      $myfile = fopen($file, "r"); 
      $data = file_get_contents($file); 
      $lines = explode("\n", $data); 
      foreach($lines as $line) { 
       $splode = explode("\t", $line); 
       $array[] = array(
        "Name" => $splode[0], 
        "Time" => $splode[1], 
        "Quant" => $splode[2], 
        "Type" => $splode[3], 
        "Price" => $splode[4], 
        ); 
      } 
      fclose($myfile); 
     } 
     return $array; 
    } 

Может ли кто-нибудь увидеть, что я делаю неправильно здесь? Спасибо.

+0

Почему бы не попробовать ['fgetcsv'] (http://php.net/manual/en/function.fgetcsv.php)? – sjagr

+0

Я бы очень хотел использовать взрыв. Есть ли способ сделать это, или fgetcsv проще? – AHalbert

+0

Взорваться при новой разрыве строки для массива строк. Затем передайте его функции для создания многомерного массива с использованием взрыва на вкладке –

ответ

1

Ваш код выглядит хорошо. Я добавил один оператор if, чтобы убедиться, что значение параметра splode было 5 длинным, прежде чем назначать его. Это защита от возможной пустой строки в конце файла.

Я запустил его в тестовом файле здесь с несколькими строками и обработал его правильно и вывел, как ожидалось.

В зависимости от того, как вы создаете этот файл - не могли бы вы иметь «\ r» или «\ r \ n» в конце каждой строки, а не только \ n? Это то, что вам нужно проверить - может быть, шестнадцатеричный редактор, но я все же считаю, что ваш код должен работать нормально (если только это не просто \ r), если есть достаточно вкладок, чтобы удовлетворить 5 на каждой строке (что я выделил для в моем предложении).

function read_file() 
{ 
    $file = "orders.txt"; 
    $array = array(); 

    if (file_exists($file)) { 
     echo "Get"; 
     $myfile = fopen($file, "r"); 
     $data = file_get_contents($file); 
     $lines = explode("\n", $data); 
     var_dump($lines); 
     foreach ($lines as $line) { 
      $splode = explode("\t", $line); 
      if (sizeof($splode) >= 5) $array[] = array(
        "Name" => $splode[0], 
        "Time" => $splode[1], 
        "Quant" => $splode[2], 
        "Type" => $splode[3], 
        "Price" => $splode[4], 
        ); 
     } 
     fclose($myfile); 
    } 
    return $array; 
} 
+0

Отлично, спасибо! кто это сделал. – AHalbert

Смежные вопросы