How to create Price Range dynamically with PHP

php, range

Solution

I Created this function based on my $array element of my question.

If this is a good aproach of my question please make some comments for like pointing my mistakes.

http://laravel.io/bin/VLJn this is the output.

private function createRange($array){
    sort($array);

    //Setting range limits.
    //Check if array has 5 digit number.
    $countDigitedNumbers = preg_grep('/\d{5}/',$array);
    if(count($countDigitedNumbers) > 3){
        $rangeLimits = array(0,1000,2500,5000,10000,15000,20000,25000);
    }else{
        $rangeLimits = array(0,50,250,500,1000,1500,2000,2500);
    }
    $ranges = array();

    for($i = 0; $i < count($rangeLimits); $i++){
        if($i == count($rangeLimits)-1){
            break;
        }
        $lowLimit = $rangeLimits[$i];
        $highLimit = $rangeLimits[$i+1];

        $ranges[$i]['ranges']['min'] = $lowLimit;
        $ranges[$i]['ranges']['max'] = $highLimit;

        foreach($array as $perPrice){
            if($perPrice >= $lowLimit && $perPrice < $highLimit){
                $ranges[$i]['values'][] = $perPrice;
            }
        }
    }
    return $ranges;
}

Problem

How can I create Price Ranges from price array? Let's say I have this array which holds prices: ``` Array ( [0] => 500 [1] => 500 [2] => 520 [3] => 540 [4] => 551 [5] => 599 [6] => 601 [7] => 601 [8] => 650 [9] => 681 [10] => 750 [11] => 750 [12] => 851 [13] => 871 [14] => 871 [15] => 900 [16] => 990 [17] => 999 [18] => 1101 [19] => 1130 [20] => 1149 [21] => 1151 [22] => 1278 [23] => 1300 [24] => 1460 ) ``` Minimum value is = 500 and maximum value is 1460. I need to show users like this : ``` [x] 500-750 (11) [x] 750-1000 (8) [x] 1000+ (7) ``` the tricky part is if values are reached 1500 or there are more than 1500 above needs look like this : ``` [x] 500-750 (11) [x] 750-1000 (8) [x] 1000-1500 (n) [x] 1500+ (if more than 1500 but not reached 2000). ``` we can say 1500 is the limit but if there are prices between 1500$ and 2000$ and more than 2000$ like 2300$ , 2400$ , 2499$, 2000$+ must be the limit. which will look like this: ``` [x] 500-750 (11) [x] 750-1000 (8) [x] 1000-1500 (n) [x] 1500-2000 (n) [x] 2000$+ (n) ``` This will create 5 range. As you can see lowest price is 500, but min. prices may 20$ or 120$ so function must not break 5 range rule. first range can be 20$-750$ (n). And of course max prices may not 1000$+ so may need to show something like this : ``` [x] 25-50 (11) [x] 50-100(8) [x] 100-200(n) [x] 200-400(n) [x] 400+ (n) ``` I hope I make this proper. There are many conditions and I don't know the usages of pow or range like functions in php. Hope you can help :/

Original source