0

我是Sharam,目前在欧洲的交换生,来自一个处理与东南亚青年有关的政治和问题的课后俱乐部。在我们的小组中,我们每个月在世界各地都有新的志愿者,我们设置了中央服务器来对俱乐部必须在未来执行的任务进行分类和优先排序,以便在我们的国家具有意义。我对PHP知之甚少,但是我很想学习,这是我的问题...

因为 SQL 太复杂了,所以我们使用 CSV。每个人都可以编辑主 CSV 并向其中添加任务,如下所示:

Priority,Task,Person
High,Campus flyers,Ashley
High,Test videocall with teacher,Sharam
Low,New Website,Martin & Aneet
Medium,Auditorium recruiting,Martin & Aneet & Ashley
Low,Garbage collecting,Sharam & Ashley
High,Ask permission to reserve classroom Sat & Sun,Sharam

如您所见,项目的优先级是高、中、低任意顺序。我试过 array_merge_recursive() 但也许我做错了:

<?php

$file = @fopen("tasks-list.csv", "r") or exit("error, check server status");

$array = array();
$header = fgetcsv($file, 1000, ","); //don't need header in array

while (!feof($file)) {
  $data = fgetcsv($file, 1000, ",");
  if (!empty($data)) {
    $array = array_merge_recursive($array, array($data[0] => $data[1], $data[2]));
  }
}
fclose($file);
?>

结果混淆了,我想念如何使 CSV 输入按列分组,如下所示:

High priority tasks:
1. Campus flyers (Ashley)
2. Test videocall with teacher (Sharam)
3. Ask permission to reserve classroom Sat & Sun (Sharam)

Medium priority tasks:
1. Auditorium recruiting (Martin & Aneet & Ashley)

Low priority tasks:
1. New Website (Martin & Aneet)
2. Garbage collecting (Sharam & Ashley)

我的代码缺少演示部分,但这不是困难的部分。HTML 对我来说很容易,但我对正确分组的数组有疑问。我怎样才能实现它?谢谢

对不起我的语法和拼写,我刚学英语二年级!--莎拉姆

4

2 回答 2

1

查看我的 PHP 类: http: //pastebin.com/KVcYxuXY

这是它的使用方式

<?php 
require_once('CSV_parser.php');
// path to your csv file
$parser = new CSV_parser('c:/sample.csv');
// Result an array
$parser->toArray();
// To table
$parser->toTable();
// To JSON
$parser->toJSON();
?>
于 2012-07-31T00:40:56.763 回答
0

构建一个以最左边的列作为索引的数组,该数组中的每个条目都是该行中的其余数据。

$result = array();
while (!feof($file)) {
  $data = fgetcsv($file, 1000, ",");
  $key = array_shift( $data);
  if( !isset( $result[ $key ])) {
    $result[ $key ] = array();
  }
  $result[ $key ][] = $data;
}

现在,要将其打印出来,您所要做的就是:

foreach( $result as $priority => $entries) {
  echo $priority . ' priority tasks' . "\n";
  foreach( $entries as $i => $entry) {
      echo "$i. {$entry[0]} ({$entry[1]})\n";
  }
  echo "\n";
}
于 2012-07-31T00:29:47.307 回答