2016-10-05 6 views
0

Я хочу создать массив , который следует за моим «CSV-логикой« но я борется.Создайте многомерный массив из CSV-логики

Вот вид примера содержания CSV:

+------------+----------+-------------+---------+ 
| Name | Duration | User | Level | 
+------------+----------+------------+----------+ 
| Bestall | 7 Days |   | T  | 
| Bestleft | 6 Days |   | ST  | 
| Turn  | 2 Days | Brother |   | 
| Jump  | 4 Days | Sister |   | 
| Bestdown | 1 Day |   | ST  | 
| Play  | 1 Day | Sister |   | 
+------------+----------+------------+----------+ 

Итак, что я пытаюсь добиться того, чтобы создать измерение за Уровень.

T обозначает Наименование и ST для Субтитры.

В этом примере, результирующий массив будет:

[Bestall] => Array 
     (
      [Duration] => 7 Days 
      [Bestleft] => Array 
         (
         [Duration] => 6 Days 
         [0] => Array 
          ( 
           [Name] => Turn  
           [Duration] => 2 Days 
           [User] => Brother 
          ) 
         [1] => Array 
          ( 
           [Name] => Jump 
           [Duration] => 4 Days 
           [User] => Sister 
          ) 
         ) 
      [Bestdown] => Array 
         (       
         [Duration] => 1 Day 
         [0] => Array 
          ( 
           [Name] => Play 
           [Duration] => 1 Day 
           [User] => Sister 
          ) 
         ) 
     ) 

Мой реальный код для этого (не работает)

$data = array(); 
    if (($handle = fopen($filename, 'r')) !== FALSE) 
    { 
     while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) 
     { 
      $level = $row[count($row)-1]; 
      $titled = false; 
      if($level=='T') { 
       $titled = $row[0]; 
       $data[$titled] = $row; 
      } 
      elseif($level=='ST') 
       $data[$titled][] = $row; 
      array_push($data[$titled], $row); 
     } 
     fclose($handle); 
    } 
+0

укажите код, что у вас пробовал еще – Anju

+0

На самом деле, что я пробовал, в принципе не работал. Я просто знаю, как читать строку csv на строку, после этого я застрял. – Plotisateur

+1

Какая у вас логика? Когда первое значение столбца «Bestall», вам нужно, чтобы все остальные строки были дочерними? Когда первое значение столбца «Bestleft» вам нужно, чтобы другие линии были дочерними, пока вы не получите следующее ключевое слово? "Bestall", "Bestleft" и "Bestdown" ваши логические ключевые слова? Пожалуйста, объясните точную логику, предполагая, что вы читаете строку за строкой. а не массив, который вы ожидаете! – masterFly

ответ

0

Здесь необходим код php:

$data = array(); 
$t = false; 
$st = false; 

if (($handle = fopen($filename, 'r')) !== FALSE) 
{ 
    $header = fgetcsv($handle, 1000, $delimiter); 

    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) 
    { 
     $level = $row[count($row)-1]; 

     if($level=='T') { 
      $t = $row[0]; 
      $data[$t][$header[1]] = $row[1]; 
     } 
     elseif($level=='ST'){ 

      $st = $row[0]; 

      $data[$t][$st][$header[1]] = $row[1]; 
     } 
     else{ 

      $tmp_row = array(
       $header[0] => $row[0], 
       $header[1] => $row[1], 
       $header[2] => $row[2] 
       ); 

      $data[$t][$st][] = $tmp_row;  
     } 

    } 
    fclose($handle); 
} 

print_r($data); 
0

Пример CSV для создания массиву

$filename = base_url() . 'yor_file.csv'; 

$content = file_get_contents($filename); 

$lines = explode("\n", $content); 

$lenthOfCsvRows = 50; 
$tempArray = array(); 
$csvArray = array(); 
for ($i = 1; $i <= $lenthOfCsvRows; $i++) { 
    $data = explode("\t", $lines[$i]); 

    $tempArray['nameKey'] = array(
     '1' => $data[0], 
     '2' => $data[1], 
     '3' => $data[2], 
     '4' => $data[3], 
    ); 
    $csvArray[]= $tempArray; 
} 
print_r($csvArray); 
+0

Thanx, но это не то, о чем я просил. – Plotisateur

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

  • Нет связанных вопросов^_^