如何使用PHP对由第二个或第三个元素转换为数组的文本文件的内容进行排序

如何使用PHP对由第二个或第三个元素转换为数组的文本文件的内容进行排序,php,arrays,sorting,Php,Arrays,Sorting,我有一个名为base.txt的文本文件,其中包含以下内容(使用:作为分隔表单数据的分隔符): 在php文件中,我通过执行以下操作将其放入数组: $data = file('base.txt'); 现在,如果我想打印内容并按名字排序,我只需执行sort($data) 但是,如果我想按姓氏或电子邮件对其排序,该怎么办?您可以使用自己的函数对数组进行排序,并使用自然排序算法对字符串进行比较,如下所示: function sortbyPos(&$array, $delimiter, $pos

我有一个名为base.txt的文本文件,其中包含以下内容(使用:作为分隔表单数据的分隔符):

在php文件中,我通过执行以下操作将其放入数组:

$data = file('base.txt');
现在,如果我想打印内容并按名字排序,我只需执行
sort($data)

但是,如果我想按姓氏或电子邮件对其排序,该怎么办?

您可以使用自己的函数对数组进行排序,并使用自然排序算法对字符串进行比较,如下所示:

function sortbyPos(&$array, $delimiter, $pos = 0) {
    usort($array, function($a, $b) use($delimiter, $pos) {
        $a = explode($delimiter, $a);
        $b = explode($delimiter, $b);
        return strnatcasecmp($a[$pos], $b[$pos]);
    });
}
我将delimiter和position等参数放在您拥有的字符串中,以选择值,结果如下:

数据:

$data = [
    'jon:doe:fakeemail@mail.com:fakepassword',
    'ross:geller:anothermail@mail.com:fakepass2',
    'bob:cosper:bob2@mail.com:fakepass'
];
按姓氏排序(字符串中的1个位置,因为是数组):

结果:

Array
(
    [0] => bob:cosper:bob2@mail.com:fakepass
    [1] => jon:doe:fakeemail@mail.com:fakepassword
    [2] => ross:geller:anothermail@mail.com:fakepass2
)
Array
(
    [0] => ross:geller:anothermail@mail.com:fakepass2
    [1] => bob:cosper:bob2@mail.com:fakepass
    [2] => jon:doe:fakeemail@mail.com:fakepassword
)
电邮订购:

sortbyPos($data, ':', 2);
print_r($data);
结果:

Array
(
    [0] => bob:cosper:bob2@mail.com:fakepass
    [1] => jon:doe:fakeemail@mail.com:fakepassword
    [2] => ross:geller:anothermail@mail.com:fakepass2
)
Array
(
    [0] => ross:geller:anothermail@mail.com:fakepass2
    [1] => bob:cosper:bob2@mail.com:fakepass
    [2] => jon:doe:fakeemail@mail.com:fakepassword
)