使用返回不可预测的结果

时间:2011-10-04 17:07:25

标签: php multidimensional-array sorting usort

我有一个从数据库返回的对象数组。未排序数组上的print_r如下所示:

Array
(
    [0] => stdClass Object
        (
            [nid] => 53162
            [title] => Kroger 'Giving Hope' Standee
            [path] => node/53162
        )

    [1] => stdClass Object
        (
            [nid] => 64185
            [title] => Kroger 'Giving Hope' Stanchion Sign
            [path] => node/64185
        )

    [2] => stdClass Object
        (
            [nid] => 52190
            [title] => Betty Crocker Kroger 'Giving Hope' Shipper
            [path] => node/52190
        )

    [3] => stdClass Object
        (
            [nid] => 53159
            [title] => Frito-Lay Kroger 'Giving Hope' Packaging
            [path] => node/53159
        )

    [4] => stdClass Object
        (
            [nid] => 53164
            [title] => Nabisco Kroger 'Giving Hope' Violator
            [path] => node/53164
        )

    [5] => stdClass Object
        (
            [nid] => 52607
            [title] => Doritos Kroger 'Giving Hope' Packaging
            [path] => node/52607
        )

    [6] => stdClass Object
        (
            [nid] => 52720
            [title] => Kroger Big K Cola 'Giving Hope' Packaging
            [path] => node/52720
        )

    [7] => stdClass Object
        (
            [nid] => 52729
            [title] => Windex Kroger 'Giving Hope' Packaging
            [path] => node/52729
        )

    [8] => stdClass Object
        (
            [nid] => 52731
            [title] => Ziploc Kroger 'Giving Hope' Packaging
            [path] => node/52731
        )

    [9] => stdClass Object
        (
            [nid] => 53157
            [title] => Stacy's Kroger 'Giving Hope' Cut Cases
            [path] => node/53157
        )

)

我想通过nid属性对数组进行排序,因此我使用了自定义的usort函数(找到here。)

function my_search_sort($a, $b) {
  strcmp($a->nid, $b->nid);
}

我这样称呼它:

usort($docs, 'my_search_sort');

然后又做了另一个print_r。结果如下所示:

Array
(
    [0] => stdClass Object
        (
            [nid] => 52720
            [title] => Kroger Big K Cola 'Giving Hope' Packaging
            [path] => node/52720
        )

    [1] => stdClass Object
        (
            [nid] => 52729
            [title] => Windex Kroger 'Giving Hope' Packaging
            [path] => node/52729
        )

    [2] => stdClass Object
        (
            [nid] => 52731
            [title] => Ziploc Kroger 'Giving Hope' Packaging
            [path] => node/52731
        )

    [3] => stdClass Object
        (
            [nid] => 53157
            [title] => Stacy's Kroger 'Giving Hope' Cut Cases
            [path] => node/53157
        )

    [4] => stdClass Object
        (
            [nid] => 52607
            [title] => Doritos Kroger 'Giving Hope' Packaging
            [path] => node/52607
        )

    [5] => stdClass Object
        (
            [nid] => 53164
            [title] => Nabisco Kroger 'Giving Hope' Violator
            [path] => node/53164
        )

    [6] => stdClass Object
        (
            [nid] => 64185
            [title] => Kroger 'Giving Hope' Stanchion Sign
            [path] => node/64185
        )

    [7] => stdClass Object
        (
            [nid] => 52190
            [title] => Betty Crocker Kroger 'Giving Hope' Shipper
            [path] => node/52190
        )

    [8] => stdClass Object
        (
            [nid] => 53159
            [title] => Frito-Lay Kroger 'Giving Hope' Packaging
            [path] => node/53159
        )

    [9] => stdClass Object
        (
            [nid] => 53162
            [title] => Kroger 'Giving Hope' Standee
            [path] => node/53162
        )

)

它显然在做某事,但根据nid,它没有按升序排序。我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:5)

您的自定义排序功能需要返回值:

function my_search_sort($a, $b) {
  return strcmp($a->nid, $b->nid);
}

修改 我更新了other answer you referenced上的代码,这是不正确的。