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