我需要一些帮助,了解如何利用fgetcsv和数组来操作数据。我很困惑如何关联多端口的数据来实现“ORDER BY $ lastNameArray”功能而不混淆数据。我将其中一个数组元素排序很好,但另一个“数组2”仍然是相同的,让它混淆了。如何正确排序数据,并保持与行上其他列的数据关系,以便我可以遍历它并操作,回显,打印等。
错误讯息:
警告:array_multisort() [function.array-multisort]:参数 预计2将是一个数组或排序标志 C:\ wamp \ www \ Codelobster2.php就行了 42
正确用于循环显示csv并在表格中显示电话号码的代码。这不排序。除了排序,它完全符合我的需要。
<?php
//table setup
//print_r($associativeAddressArray);
//header setup for table output view
echo "<h1>Phone Directory</h1>";
echo "<table border = '1' width = '50%'>\n";
echo "<tr>";
echo "<th>Name</th>";
echo "<th>Phone Number</th>";
//get data from file
$fileName = 'phoneData.csv';
$file = fopen($fileName,"r");
//while not to end of file
while (!feof($file) )
{
while (($csv_line = fgetcsv($file)) !== FALSE)
{
//print_r($csv_line);
echo "<tr>"; //beginning new row of record
echo "<td>" . $csv_line[0] .", ". $csv_line[1]. "</td>"; // 0=lastName, 1=FirstName
echo "<td>" . $csv_line[5] ."-" . $csv_line[6]. "</td>"; //
echo "</tr>"; //new row
}
echo "</table>\n";
}
echo '<FORM><INPUT TYPE="button" VALUE="Back" onClick="history.go(-1);return true;"></FORM>'; //let me know if a better way to do this exists, I'm very limited on html experince
?>
作为对其他学生的进一步编辑,引用数组的最后一个循环在我做的时候起作用:
//array_multisort($names, $data); // need to sort the data by last name while keeping the seperate arrays in sync
array_multisort($names, SORT_DESC, $phones, SORT_DESC, $data);
//Obtain a list of columns
foreach ($data as $record)
{
echo "<tr>"; //beginning new row of record
echo "<td>" . $record['name'] . "</td>"; // 0=lastName, 1=FirstName
echo "<td>" . $record['phone'] . "</td>"; //
echo "</tr>"; //new row
}
答案 0 :(得分:3)
如果你想使用php的数组排序功能对它进行排序,那么你需要建立一个完整的数组,当你从文件中读取时,你将无法做到这一点。
因此,在读取每一行时,不需要循环并打印出来,而是需要构建一个包含所有数据的数组。
假设他们只需按姓名或电话号码排序:
$data = array();
while (($csv_line = fgetcsv($file)) !== FALSE) {
$name = $csv_line[0] .", ". $csv_line[1];
$phone = $csv_line[5] ."-" . $csv_line[6];
$data[] = array(
'name' => $name,
'phone' => $phone
);
$phones[] = $phone;
$names[] = $name;
}
你也不需要在feof while循环中包含while循环,fgetcsv将在出错时返回false(包括EOF)。
获得$ data数组后,可以使用array_multisort(如示例3所示):
array_multisort($names, SORT_DESC, $phones, SORT_DESC, $data);
大文件可能会失败,因为所有数据都需要存储在内存中,利用数据库存储数据并返回排序数据是一种更有效的选择。
答案 1 :(得分:1)
另外,根据您导入的数据量,您可能会更好地将CSV数据导入关系数据库。然后通过DB运行排序或其他功能。
同样,它真的取决于流量,你可以使用array_multisort()
来充分排序。