从 CSV 逻辑创建多维数组

Create a multi-dimensional array from a CSV logic

我想创建一个遵循我的“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   |          |
+------------+----------+------------+----------+

所以,我试图实现的是为每个 Level.

创建一个维度

T 代表 Title,ST 代表 SubTitles

在此示例中,生成的数组将是:

[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);
    }

创建数组的 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);

这是您需要的 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);