尝试将关联数组放回保存为.csv文件的平面文本文件中

时间:2014-08-21 05:48:25

标签: php arrays csv

我创建了一个脚本,它将采用带有4位信息的平面文本文件,用逗号分隔4位信息,就好像它是一个csv文件一样,(我已经保存了它) ,它会将此文件分解为一个数组,根据数字(人的年龄)从最高到最低对信息进行排序,之后我没有完成脚本的解决方案。我需要的是再次将此数组重写回平面文件,现在信息已经正确排序。

我在考虑重写或某种内爆。

数组看起来像这样:

Array
(
    [0] => Array
        (
            [name] => john
            [age] => 58
            [job] => inspector
            [salary] => 42000
        )

    [1] => Array
        (
            [name] => henry
            [age] => 49
            [job] => supervisor
            [salary] => 38000
        )
    [2] => Array
        (
            [name] => monica
            [age] => 27
            [job] => assistant
            [salary] => 29000
        )


)

我页面上的实际代码如下所示:

?php>

$fh = fopen("C:xampp/htdocs/warehouseemplyees.csv", "r");

while(!feof($fh)){
    $current = trim(fgets($fh));
    $iArray[] = explode(",", $current);
}
$count = count($iArray);
for($x=0;$x<$count;$x++){
    $newArray[$x]["name"] = $iArray[$x][0];
    $newArray[$x]["age"] = $iArray[$x][1];
    $newArray[$x]["job"] = $iArray[$x][2];
    $newArray[$x]["salary"] = $iArray[$x][3];
}

function cmp($a, $b)
{
    if ($a['age'] == $b['age']) {
        return 0;
    }
    return ($a['age'] > $b['age']) ? -1 : 1;
}
usort($newArray, "cmp");


?>

在保存的flat csv文本文件中,结果如下所示:

john,58,inspector,42000
henry,49,supervisor,38000
monica,27,assistant,29000

总结。所以,再一次,我只需要能够在这个函数按年龄从最高到最低排序之后将这些结果放回到文件中。顺便说一下,这段代码效果很好,结果可以在我的localhost中看到,但需要将结果返回到文件中。谢谢你的帮助。 并且,如果您愿意,请特别关注我,我对编程非常陌生,如果您告诉我将特定信息放在代码中的哪个位置,这将有所帮助。我无法理解人们在谈论代码时经常使用的一般描述。因此,如果我的特定阵列名称在某处或其他特定名称,请花时间告诉我,因为我不知道具体应用程序的具体更改。请从上面的代码中取出必要的部分,并将其填入您的解决方案中,以便我知道。谢谢你!

1 个答案:

答案 0 :(得分:0)

$fh = fopen("C:xampp/htdocs/warehouseemplyees.csv", "r");

while(!feof($fh)){
    $current = trim(fgets($fh));
    $iArray[] = explode(",", $current);
}
// You're done reading here
fclose ($fh);
$count = count($iArray);
for($x=0;$x<$count;$x++){
    $newArray[$x]["name"] = $iArray[$x][0];
    $newArray[$x]["age"] = $iArray[$x][1];
    $newArray[$x]["job"] = $iArray[$x][2];
    $newArray[$x]["salary"] = $iArray[$x][3];
}

function cmp($a, $b)
{
    if ($a['age'] == $b['age']) {
        return 0;
    }
    return ($a['age'] > $b['age']) ? -1 : 1;
}
usort($newArray, "cmp");

// Reopen your file to overwrite with new content : "w". I guess it's the part you were looking for ?
$fh = fopen("C:xampp/htdocs/warehouseemplyees.csv", "w");

foreach ($newArray as $line) {
  fputcsv ($fh, $line); 
}
fclose ($fh);

您可能需要查看fputcsv以了解阅读部分,然后阅读fgetcsv以了解如何轻松设计阅读部分。

http://php.net/manual/en/function.fputcsv.php

http://php.net/manual/en/function.fgetcsv.php