【问题标题】:How to set variables in an array PHP如何在数组 PHP 中设置变量
【发布时间】:2015-02-06 07:03:47
【问题描述】:

我正在尝试读取具有 21 个这样的名称的文本文件;

123, bill, bobs
124, joe, public 

我已经能够将它们放入一个数组中,但我不知道如何将每个名称设置为一个变量,因为我需要根据他们的姓氏按字母顺序对它们进行排序。到目前为止,这是我的代码;

$file = fopen("students.txt", "r");
If ($file) {
    while (!feof($file)) {
        $array = explode("/n", fread($file, filesize("students.txt")));
        print_r($array);
    }
} else {
    echo 'File unopened';
}

我已经尝试了以下代码,但它似乎不起作用;

fscanf ($fp, "%s, %s, %s/n", $num, $first, $last). "<br/>";

【问题讨论】:

  • 您是否尝试过使用usort() 或类似方法进行排序?
  • 你基本上得到了 CSV 文本。只需使用fgetcsv() 将每一行读入一个数组,然后使用usort() 为该数组定义您自己的自定义排序函数。
  • 顺便说一句,这是\n 而不是/n
  • @sohpie 如果下面给出的任何答案解决了您的问题,您可能会投票并接受其中一个(认为合适的答案)以帮助未来的读者。跨度>

标签: php arrays variables


【解决方案1】:

只需将整个文件读入一个数组,并分解每一行,然后对结果进行排序。

$array = file('your_file.txt');
if(false === $array) {
    // you had a problem reading file
    exit();
}

$exploded_array = array();
foreach($array as $csv) {
    $exploded_array[] = explode(',', $csv)
}

usort($exploded_array, function ($a, $b) {
    if ($a[2] == $b[2]) {
        return 0;
    }
    return ($a[2] < $b[2]) ? -1 : 1;
}

您还可以查看使用fgetscv() 而不是file()explode() 的组合。无论哪种方式都几乎相同。

【讨论】:

  • 很抱歉几秒钟后发布了一个类似的解决方案,但在发布我的答案之前我没有收到关于新答案的通知。
  • @rangad 没问题。在查看它时,您实际上覆盖了一个我没有覆盖的区域,即修剪值。如果文件如图所示(逗号后有空格),这将很重要。
【解决方案2】:

您的文件相关代码过于复杂。

$users = file('students.txt', FILE_SKIP_EMPTY_LINES);

array_walk($users, function (&$val) {
    $newAr = explode(',', $val);
    $val = array_map('trim', $newAr);
});

usort($users, function($a, $b) {
    return strnatcmp($a[2], $b[2]);
});

var_dump($users);

Example with fake data @3v4l

或者,您可以使用fgetcsv 从文件中获取值,正如@MarkB 在您问题的 cmets 中指出的那样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2018-06-24
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多