PHP自定义排序

Yad*_*ada 3 php

我正在尝试对一系列值进行排序.

数组中可能的值是'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'),
);
Run Code Online (Sandbox Code Playgroud)

我想要:

    $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'),
    );
Run Code Online (Sandbox Code Playgroud)

我一直在玩uasort.

有谁解决了他的问题?


测试驱动程序

<?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);
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 5

用于您的排序功能:

function cmp($a, $b) {
    if ($a == 'neg_infinity') {
       return -1
    }
    if ($a == 'infinity') {
       return 1
    }
    return ($a < $b ? -1 : 1)
}
Run Code Online (Sandbox Code Playgroud)


mfo*_*nda 5

这样的事情应该有效:

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;
}
Run Code Online (Sandbox Code Playgroud)