为什么这个php array_multisort没有按预期工作?

时间:2012-06-04 09:28:43

标签: php arrays multidimensional-array

这些都不起作用......(没有任何分类)

我在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
    )
)

1 个答案:

答案 0 :(得分:1)

在您致电return $rrp后,您需要在{1}}中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}来确定数组中首先放置哪个元素。

如果需要,您可以创建更多{{1}}个函数,只需更改它包含的字段值。