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