按字符串中的数字对数组元素进行排序?

时间:2011-11-08 04:49:19

标签: php sorting

我有一个.txt文件,如下所示:

john 1000 
mike 8393 
tom 1000 
bob 233 
roger 2 
daniel 233 
... ...

我需要将每一行放入数组并按数字大小排序,而不会丢失名称与数字相符的内容。

还有一些数字在文件中重复。

最后,我希望回显按数字大小排序的数组元素。

3 个答案:

答案 0 :(得分:1)

你可以将每一行分成整数和字符串数组(在空格中拆分当前字符串),然后使用kso​​rt对数组进行排序(假设键是整数),然后你就去了!

当然,您也可以使用更强大的排序,但这样可以帮助您。

然后,您可以使用print_r打印它,以打印人类可读的数组版本

http://php.net/manual/en/array.sorting.php

http://php.net/manual/en/function.print-r.php

答案 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.使用索引作为数字创建数组,并使用kso​​rt();

对其进行排序
$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,你应该使用离散函数