Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP custom sorting

Tags:

php

I'm trying to sort an array of values.

The possible values in the array are 'neg_infinity',... {real numbers},.., 'infinity'

<?php
$a = array(
  array('column' => 3),
  array('column' => -1),
  array('column' => 1),
  array('column' => .1),
  array('column' => 2),
  array('column' => 'infinity'),
  array('column' => 'neg_infinity'),
  array('column' => 'infinity'),
);

I want:

    $a = array(
      array('column' => 'neg_infinity'),
      array('column' => -1),
      array('column' => .1),
      array('column' => 1),
      array('column' => 2),
      array('column' => 3),
      array('column' => 'infinity'),
      array('column' => 'infinity'),
    );

I've been playing around with uasort.

Anybody have a solution to his problem?


TEST DRIVER

<?php
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    if ($a == 'neg_infinity') {
        return -1;
    }
    if ($a == 'infinity') {
        return 1;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array('a' => 'infinity', 'b' => 8, 'c' => -1,'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4, 'd' => 'neg_infinity');


uasort($a, 'cmp');


var_dump($a);
like image 622
Yada Avatar asked Aug 01 '26 14:08

Yada


2 Answers

Use this for your sorting function:

function cmp($a, $b) {
    if ($a == 'neg_infinity') {
       return -1
    }
    if ($a == 'infinity') {
       return 1
    }
    return ($a < $b ? -1 : 1)
}
like image 129
Marc B Avatar answered Aug 04 '26 03:08

Marc B


Something like this should work:

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    if ($a == 'neg_infinity') {
        return -1;
    }
    if ($a == 'infinity') {
        return 1;
    }
    return ($a < $b) ? -1 : 1;
}
like image 44
mfonda Avatar answered Aug 04 '26 02:08

mfonda



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!