我正在尝试通过公司名称从平面文件中按字母顺序对数据进行排序。我在想一个简单的方法可以解决这个问题,但我错了。我现在认为我需要使用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
}
答案 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
,这也可能会快一些。