Skip to content

🔢 Sort an array of strings based on the included numbers naturally.

License

Notifications You must be signed in to change notification settings

awssat/numbered-string-order

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

numberedStringOrder

Latest Version on Packagist StyleCI Build Status

Sort an array of strings based on the included numbers naturally. An alternative to PHP built-in natsort function that's actually work.

Install

Via Composer

$ composer require awssat/numbered-string-order

Usage

Sort

//if you are using laravel, then instead use:
//$numberedStringOrder = app(Awssat\numberedStringOrder\numberedStringOrder::class);

$numberedStringOrder = new numberedStringOrder();

$numberedStringOrder->sort([
    'episode 5',
    'episode50',
    '499',
    'episode1',
    'episode two hundred',
    'episode one',
    'episode two',
    'episode eleven',
    'episode three'
]);
    

>> output: 
[
     "episode1",
     "episode one",
     "episode two",
     "episode three",
     "episode 5",
     "episode eleven",
     "episode50",
     "episode two hundred",
     499,
]
   

If you ask why not use the built-in function (natsort), then see the natsort output of the same example above to know why:

 //output of built-in function natsor(): 🤨
 [
     "499",
     "episode1",
     "episode 5",
     "episode50",
     "episode eleven",
     "episode one",
     "episode three",
     "episode two",
     "episode two hundred",
   ]

Get the numbers

If you want to use our internal numbers extracting method

$numberedStringOrder->getNumbers(['2digits', 'text1', 'three3', 'two cars', 'blank']);

>> output:
[
     "2digits" => 2,
     "text1" => "1",
     "three3" => "3",
     "two cars" => 2,
     "blank" => "blank",
]

Convert words to numbers

This package can also be helpful if you want to convert numerical words to numbers

new numberedStringOrder();
$numberedStringOrder->englishWordsToNumbers('one hundred twenty-three thousand four hundred fifty-six');
>> output: 123456

//to get arabic words to number use: arabicWordsToNumbers(...)

Test

composer test

Currently, it supports English and Arabic.

License

The MIT License (MIT). Please see License File for more information.