15

私は配列を持っています..

$test = array("def", "yz", "abc", "jkl", "123", "789", "stu");

私がそれを実行sort()すると、私は得る

Array
(
    [0] => 123
    [1] => 789
    [2] => abc
    [3] => def
    [4] => jkl
    [5] => stu
    [6] => yz
)

しかし、私はそれを見たいです

Array
(
    [0] => abc
    [1] => def
    [2] => jkl
    [3] => stu
    [4] => yz
    [5] => 123
    [6] => 789
)

試しarray_reverseてみましたが、何も変わらないようです。そのため、数字を最後に取得する方法について、現時点では少し迷っていますが、順番も同様です

4

4 に答える 4

14

必要なのはソートですが、カスタム比較関数 (usort) を使用します。次のコードはそれを行います:

function myComparison($a, $b){
    if(is_numeric($a) && !is_numeric($b))
        return 1;
    else if(!is_numeric($a) && is_numeric($b))
        return -1;
    else
        return ($a < $b) ? -1 : 1;
} 
$test = array("def", "yz", "abc", "jkl", "123", "789", "stu");
usort ( $test , 'myComparison' );
于 2012-09-25T19:55:14.040 に答える
7

ソートする前に数値を整数に変換できます。

$array = array("def", "yz", "abc", "jkl", "123", "789", "stu");

foreach ($array as $key => $value) {
    if (ctype_digit($value)) {
        $array[$key] = intval($value);
    }
}

sort($array);
print_r($array);

出力:

Array
(
  [0] => abc
  [1] => def
  [2] => jkl
  [3] => stu
  [4] => yz
  [5] => 123
  [6] => 789
)
于 2012-09-25T19:53:05.003 に答える
2

次のコードでは、データを 2 つの配列に分けています。1 つは数値で、もう 1 つは数値ではなく、並べ替えてマージします。

$arr1 = $arr2 = array();

$foreach ($arr as $val) {

if (is_numeric($val)) {array_push($arr2, $val); } 
else {array_push($arr1, $val);}

} 

したがって、数値と非数値の配列を分離する必要があります

sort($arr2);
sort($arr1);

$test = array_merge($arr2,$arr1);
于 2012-09-25T19:54:47.847 に答える