我有一个.txt文件,如下所示:
john 1000 mike 8393 tom 1000 bob 233 roger 2 daniel 233 ... ...
我需要将每一行放入数组并按数字大小排序,而不会丢失名称与数字相符的内容。
还有一些数字在文件中重复。
最后,我希望回显按数字大小排序的数组元素。
答案 0 :(得分:1)
你可以将每一行分成整数和字符串数组(在空格中拆分当前字符串),然后使用ksort对数组进行排序(假设键是整数),然后你就去了!
当然,您也可以使用更强大的排序,但这样可以帮助您。
然后,您可以使用print_r打印它,以打印人类可读的数组版本
答案 1 :(得分:1)
如果您正在运行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);
答案 2 :(得分:0)
你可以采取三种方式:
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($列表);
打印数组,或创建自己的代码
P.S。不要忘记使用lambda函数调用usort是PHP 5.3方式,如果你使用早期版本的PHP,你应该使用离散函数