排序平面文件数组

时间:2013-05-29 17:13:17

标签: php sorting flat-file

我正在尝试通过公司名称从平面文件中按字母顺序对数据进行排序。我在想一个简单的方法可以解决这个问题,但我错了。我现在认为我需要使用usortcmp,然后创建另一个临时数组。我怎么能做到这一点?

这是我目前的代码。

$data_file = fopen($data_file_url, "r");
fgets($data_file); // IGNORE FIRST LINE IN FLATFILE - column names
while (!feof($data_file) ) {
    $data_lines = fgets($data_file);
    $data_ele = explode('|', $data_lines);

    $company_name = $data_ele[0];
    $section = $data_ele[1];
    $category = $data_ele[2];
    $service = $data_ele[3];
    $service = substr_replace($service,"",-1); // trim last char
}

2 个答案:

答案 0 :(得分:1)

首先应将所有元素存储在一个大数组中,然后使用回调对其进行排序:

$data_file = fopen($data_file_url, "r");
fgets($data_file); // IGNORE FIRST LINE IN FLATFILE - column names

$companies = array();
while (!feof($data_file) ) {
    $data_lines = fgets($data_file);
    $data_ele = explode('|', $data_lines);

    $row = array();
    $row['company_name'] = $data_ele[0];
    $row['section'] = $data_ele[1];
    $row['category'] = $data_ele[2];
    $row['service'] = $data_ele[3];
    $row['service'] = substr_replace($row['service'],"",-1); // trim last char

    $companies[] = $row;
}

usort($companies, function ($a, $b) {
    return strcmp($a['company_name'], $b['company_name']);
});

请注意:我正在使用PHP 5.3.0中引入的匿名函数。

答案 1 :(得分:0)

我只会通过使用公司名称作为数组中的键来解决Beats问题。

如果每个公司有多个条目,则有一个子数组。

通过将键用作数组,它在插入时已被索引。

我相信它更快。

你也可以在这里使用fgetcsv,这也可能会快一些。