数组使用PHP中的数字和字符串值排序

时间:2014-05-22 02:40:51

标签: arrays sorting

我的阵列:

$data = array(
      array(
          'id' => 1,
          'value' => 1.2
      ),
      array(
          'id' => 2,
          'value' => 2.5
      ),
      array(
          'id' => 3,
          'value' => 'N/A'
      )
    );

我希望排序值编号始终位于值字符串之前(2.5 - > 1.2 - >' N / A'):

我的代码:

usort($data, function($a, $b) {
    if ($a['value'] == 'N/A') {
        return $b['value'];
    } elseif ($b['value'] == 'N/A') {
        return $a['value'];
    }

    return strcmp($b['value'], $a['value']);
});

但没有工作,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

<?php
$data = array(
      array(
          'id' => 1,
          'value' => 1.2
      ),
      array(
          'id' => 2,
          'value' => 2.5
      ),
      array(
          'id' => 3,
          'value' => 'N/A'
      )
    );

$value= array();

foreach ($data as $k => $sub_arr) {
    $value[$k] = $sub_arr['value'];
}

array_multisort($value, SORT_DESC, SORT_NUMERIC, $data);
print_r($data);
?>

输出:

$ php -f test.php 
Array
(
    [0] => Array
        (
            [id] => 2
            [value] => 2.5
        )

    [1] => Array
        (
            [id] => 1
            [value] => 1.2
        )

    [2] => Array
        (
            [id] => 3
            [value] => N/A
        )

)

这里我们使用array_multisort函数。