根据类型对混合数组进行排序

时间:2011-04-17 06:59:07

标签: php arrays

这是一个例子

Array
(
    [menu] => 11
    [parent] => 0
    [0] => 34
    [page] => 1
)

我希望将其排序为这样,带有数字索引的所有值都应该放在底部。

Array
(
    [menu] => 11
    [parent] => 0
    [page] => 1
    [0] => 34
)

3 个答案:

答案 0 :(得分:2)

您可以使用ksort()http://php.net/manual/en/function.ksort.php

$arr    = array(
    'menu' => 11,
    'parent' => 0,
    0 => 34,
    'page' => 1
);
echo '<pre>';
print_r($arr);
ksort($arr);
print_r($arr);
echo '</pre>

将输出

Array
(
    [menu] => 11
    [parent] => 0
    [0] => 34
    [page] => 1
)
Array
(
    [menu] => 11
    [page] => 1
    [parent] => 0
    [0] => 34
)

答案 1 :(得分:0)

听起来像是usort。 一些示例代码:

function cmp($a, $b)
{
    if (gettype($a) == "string" && gettype($b) == "int")
        return -1;
    else if (gettype($a) == "int" && gettype($b) == "string")
        return 1;
    else if (gettype($a) == "string" && gettype($b) == "string")
    {
        //String comparer
    }
    else if (gettype($a) == "int" && gettype($b) == "int")
    {
        if ($a == $b)
            return 0;

        return ($a < $b) ? -1 : 1;
    }
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {
    echo "$key: $value\n";
}

答案 2 :(得分:0)

这似乎有效

<?php

$a = Array(
    'menu' => 11,
    'parent' => 0,
    0 => 34,
    'page' => 1,
);

function cmp($a, $b) {
    $ia = is_int($a);
    $ib = is_int($b);
    if ($ia === $ib) {
        return 0;
    } elseif ($ia) {
        return 1;
    } elseif ($ib) {
        return -1;
    }
    return 0;
}

uksort($a, 'cmp');

var_dump($a);