1

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

这是我当前的代码。

$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
}
4

2 回答 2

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 中引入的匿名函数。

于 2013-05-29T17:51:53.657 回答
0

我只会通过使用公司名称作为数组中的键来改进 Beats 的答案。

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

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

我相信它更快。

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

于 2013-05-30T11:43:30.557 回答