PHP的排序和分组

时间:2018-06-27 07:41:46

标签: php sorting grouping

目前,我正在对文件内容进行排序和分组 例如我有这个txt文件

输入

 - Test_test01.abc 
 - Test_test02.abc 
 - Test_testaroony.abc
 - Test_testBits32.abc
 - Test_testBits3202.abc 
 - Test_testBits16.abc
 - Test_testBits1602.abc

预期产量

Group:

 - Test_test01.abc
 - Test_test02.abc

Group:

 - Test_testaroony.abc

Group:

 - Test_testBits16.abc
 - Test_testBits1602.abc
 - Test_testBits32.abc
 - Test_testBits3202.abc

这是我的起始代码(显然需要改进:))

 <?php
    $names = array(
                   "Test_test01.abc",
                   "Test_test02.abc",
                   "Test_testaroony.abc",
                   "Test_testBits3202.abc",
                   "Test_testBits16.abc",
                   "Test_testBits1602.abc"
                   );
    sort($names);

    $nlength = count($names);
    for($x = 0; $x < $nlength; $x++) {
        echo $names[$x];
        echo "<br>";
    }
    ?>

并输出

 - List item
 - Test_test01.abc
 - Test_test02.abc
 - Test_testBits16.abc
 - Test_testBits1602.abc 
 - Test_testBits32.abc
 - Test_testBits3202.abc
 - Test_testaroony.abc

请给我一点帮助:)

1 个答案:

答案 0 :(得分:0)

正如我已经评论过的,您必须决定一个规则来对项目进行分组。另外,建议使用natsort代替sort

$names = array("Test_test01.abc", "Test_test02.abc", "Test_testaroony.abc",
 "Test_testBits32.abc", "Test_testBits3202.abc", "Test_testBits16.abc", "Test_testBits1602.abc");
natsort($names);

$result = array_reduce($names, function ($carry, $item) {
    if (!isset($carry[$item[9]])) {
        $carry[$item[9]] = [$item];
    } else {
        $carry[$item[9]][] = $item;
    }
    return $carry;
}, []);

$result = array_values($result);

echo '<pre>';
var_dump($result);
echo '</pre>';

结果将是:

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(15) "Test_test01.abc"
    [1]=>
    string(15) "Test_test02.abc"
  }
  [1]=>
  array(4) {
    [0]=>
    string(19) "Test_testBits16.abc"
    [1]=>
    string(19) "Test_testBits32.abc"
    [2]=>
    string(21) "Test_testBits1602.abc"
    [3]=>
    string(21) "Test_testBits3202.abc"
  }
  [2]=>
  array(1) {
    [0]=>
    string(19) "Test_testaroony.abc"
  }
}