natrsort 函数不返回值
natrsort function not returning values
我正在尝试按降序对平面文件 (.txt) 进行排序。
这是file.txt里面的名单(姓名,年龄,身份证号码):
Jason, 24, 18299
Bryan, 19, 12999
James, 32, 72990
我的目标是根据第二列按自然降序排列列表。
我尝试制作一个 natrsort 函数来反转排列。
这是我想出的:
<?php
$rows = array();
$result = '';
$data = file('file.txt');
function natrsort(&$array) //the function i made to arrange them in descending order
{
natsort($array);
$array = array_reverse($array);
}
foreach($data as $key => $val) {
$rowarray = explode(",", $val);
$rows[] = $rowarray[1];
}
natrsort($rows);
//print_r($rows); When I use this, everything seems to work.
foreach($rows as $key => $val) {
$result .= trim($data[$key]) . "<br/>";
}
echo $result; //display the new sorted list
输出一直显示相同的列表。没有排序发生。也许我遗漏了什么?
当你使用$data[$key]
时,$key
等于0
、1
和2
,因为array_reverse()
re-index 数组。因此,您打印的数组与文件中的数据的顺序相同。
您可以使用natsort()
,然后,仅反转键数组:
natsort($rows);
$indexes = array_reverse(array_keys($rows));
foreach ($indexes as $key) {
$result .= trim($data[$key]) . '<br>';
}
打印:
James, 32, 72990<br>Jason, 24, 18299<br>Bryan, 19, 12999<br>
另一种方法 是使用自定义排序函数进行排序,例如 usort()
:
$result = '';
$data = file('file.txt');
usort($data, function($a, $b) {
[, $ageA] = explode(',', $a);
[, $ageB] = explode(',', $b);
return intval($ageB) <=> intval($ageA);
});
foreach ($data as $val) {
$result .= trim($val) . '<br>';
}
echo $result;
输出:
James, 32, 72990<br>Jason, 24, 18299<br>Bryan, 19, 12999<br>
我正在尝试按降序对平面文件 (.txt) 进行排序。
这是file.txt里面的名单(姓名,年龄,身份证号码):
Jason, 24, 18299
Bryan, 19, 12999
James, 32, 72990
我的目标是根据第二列按自然降序排列列表。 我尝试制作一个 natrsort 函数来反转排列。
这是我想出的:
<?php
$rows = array();
$result = '';
$data = file('file.txt');
function natrsort(&$array) //the function i made to arrange them in descending order
{
natsort($array);
$array = array_reverse($array);
}
foreach($data as $key => $val) {
$rowarray = explode(",", $val);
$rows[] = $rowarray[1];
}
natrsort($rows);
//print_r($rows); When I use this, everything seems to work.
foreach($rows as $key => $val) {
$result .= trim($data[$key]) . "<br/>";
}
echo $result; //display the new sorted list
输出一直显示相同的列表。没有排序发生。也许我遗漏了什么?
当你使用$data[$key]
时,$key
等于0
、1
和2
,因为array_reverse()
re-index 数组。因此,您打印的数组与文件中的数据的顺序相同。
您可以使用natsort()
,然后,仅反转键数组:
natsort($rows);
$indexes = array_reverse(array_keys($rows));
foreach ($indexes as $key) {
$result .= trim($data[$key]) . '<br>';
}
打印:
James, 32, 72990<br>Jason, 24, 18299<br>Bryan, 19, 12999<br>
另一种方法 是使用自定义排序函数进行排序,例如 usort()
:
$result = '';
$data = file('file.txt');
usort($data, function($a, $b) {
[, $ageA] = explode(',', $a);
[, $ageB] = explode(',', $b);
return intval($ageB) <=> intval($ageA);
});
foreach ($data as $val) {
$result .= trim($val) . '<br>';
}
echo $result;
输出:
James, 32, 72990<br>Jason, 24, 18299<br>Bryan, 19, 12999<br>