Currenty I am working on file content sorting and grouping for example I have this txt file
Input
- Test_test01.abc
- Test_test02.abc
- Test_testaroony.abc
- Test_testBits32.abc
- Test_testBits3202.abc
- Test_testBits16.abc
- Test_testBits1602.abc
Expected output
Group:
- Test_test01.abc
- Test_test02.abc
Group:
- Test_testaroony.abc
Group:
- Test_testBits16.abc
- Test_testBits1602.abc
- Test_testBits32.abc
- Test_testBits3202.abc
Here is my starting code (obviously need to improve :))
<?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>";
}
?>
And Output
- List item
- Test_test01.abc
- Test_test02.abc
- Test_testBits16.abc
- Test_testBits1602.abc
- Test_testBits32.abc
- Test_testBits3202.abc
- Test_testaroony.abc
Can I get a bit of help please :)
As I already commented you must decide a rule to group the items by. Also it would be recommended to use natsort
instead of 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>';
The result would be:
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"
}
}