我有一个。txt文件,看起来像这样:
<>之前约翰1000年迈克8393汤姆1000年鲍勃233罗杰2233年丹尼尔……之前我需要将每一行放入数组中,并按数字大小排序,而不丢失与数字对应的名称。
还有一些数字在文件中重复。
最后我想回显数组中按数字大小排序的元素
您可以将每行分成整数和字符串的数组(在空格上分割当前字符串),然后使用ksort对数组进行排序(假设键是整数),然后就可以了!
当然,您可以选择使用更健壮的排序,但这将使您达到目的。
然后可以使用print_r来打印数组
的人类可读版本。http://php.net/manual/en/array.sorting.php http://php.net/manual/en/function.print-r.php如果你运行的是php 5.3+
$fileLines = explode("'n", $fileContents);
usort($fileLines, function($a, $b) {
$aNumber = (int)substr($a, strpos($a, ' ')+1);
$bNumber = (int)substr($b, strpos($b, ' ')+1);
if($aNumber === $bNumber) {
return 0;
}
return $aNumber > $bNumber ? 1 : -1;
});
如果你运行的是低版本,将函数转换为全局函数,并提供名称作为回调字符串。
usort($fileLines, 'sortlines');
function sortlines($a, $b) {
$aNumber = (int)substr($a, strpos($a, ' ')+1);
$bNumber = (int)substr($b, strpos($b, ' ')+1);
if($aNumber === $bNumber) {
return 0;
}
return $aNumber > $bNumber ? 1 : -1;
}
然后var_dump($fileLines);
你有三种选择:
1。创建带有数字索引的二维数组,并使用usort()对其排序;lambda函数
$list = array(array('name' => 'john', 'number' => 1000),
array('name' => 'mike', 'number' => 8393),
array('name' => 'tom', 'number' => 1000)
);
$by = 'number';
usort($list, function($first, $second) use ($by)
{
if ($first[$by] > $second[$by] { return 1; }
elseif (first[$by] < $second[$by]) { return -1; }
return 0;
}
);
2。
创建以索引为名称的数组,并使用sort();$list = array('john' => 1000,
'mike' => 8393,
'tom' => 1000
);
sort($list);
3。创建索引为数字的数组,并使用ksort();
$list = array(1000 => 'john',
8393 => 'mike',
1000 => 'tom'
);
ksort($list);
如果你选择第一种方式,你可以将元素命名为
$list[0][name] = 'bob'
$list[1][number] = 1000;
第二
$list['john'] = 1001;
第三$list[1000] = 'bob';
在最后两种方法中,应该使用foreach遍历数组
使用print_r($list);
或var_dump(列表)美元;
打印数组,或者创建自己的代码
注:不要忘记使用lambda函数调用ussort是PHP 5.3的方式,如果你使用的是早期版本的PHP,你应该使用离散函数