0

これらのどちらも機能しません... (何もソートされていません)

PHP docs サイトの例からこれらを適応させました。

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最初のものと2 番目のもので行う必要があります。return $namearray_multisort

これは、最初に関数に渡した変数ではなく、関数が変数$rrpおよびをソートしているためです。$name

編集:単に配列の値で並べ替えようとしている場合$productsnameより良い方法は完全に次のとおりです。

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 に答える