0

这些都不起作用......(没有排序)

我从 PHP 文档站点上的一个示例中改编了这些内容。

class ProductHelper {

    function sortProductsByPrice($products, $sort = SORT_ASC) {
        foreach ($products as $key => $row) {
            $name[$key]  = $row['name'];
            $rrp[$key] = $row['rrp'];
        }       
        array_multisort($rrp, $sort, $name, SORT_ASC, $products);
    }

    function sortProductsByName($products, $sort = SORT_ASC) {
        foreach ($products as $key => $row) {
            $name[$key] = $row['name'];
        }
        array_multisort($name, $sort, $products);
    }

}

这就是我使用它的方式:

        $products = $cur_prod_cat["products"]; // copy an array of products
        $PRODUCT_HELPER->sortProductsByName($products); //sort it

如果您需要查看, products 数组看起来像这样:

Array (
    [0] => Array (
        [id] => 0
        [name] => product name
        [description] => product description
        [price] => product price
        [etc] => other attributes
    )
    [1] => Array (
        [id] => 1
        [name] => product name
        [description] => product description
        [price] => product price
        [etc] => other attributes
    )
)
4

1 回答 1

1

return $rrp在您return $name致电array_multisort.

这是因为该函数正在对变量$rrp和进行排序$name,而不是您最初传递给函数的变量。

编辑:如果你只是想$products按它的name数组值排序,一个更好的方法完全如下:

function sort_name($a,$b) {
    return strcmp($a['name'],$b['name']);
}

$products = $cur_prod_cat["products"];
usort($products,'sort_name');

这使用该函数sort_name来确定首先放置数组中的哪个元素。

然后,您可以根据需要创建更多sort_{value}函数,只需更改它包含的字段值。

于 2012-06-04T09:30:41.657 回答