为了账号安全,请及时绑定邮箱和手机立即绑定

在 Json 数组输出短按产品价格 ASC 和 DESC

在 Json 数组输出短按产品价格 ASC 和 DESC

PHP
鸿蒙传说 2022-01-02 16:27:09
需要按产品价格及其变动价格重新排列( ASC / DESC )。就像我有 3 个产品 ID 一样,每个产品也有 2 或 4 个不同的价格细节。喜欢 :product 1 { variation 1 => price : 100 , variation 1 => price : 200 }product 2 { variation 3 => price : 150 , variation 4 => price : 50 }product 3 { variation 5 => price : 250 , variation 6 => price : 800 }因此,它将重新排列 (DESC)product 3 { variation 5 => price : 250 , variation 6 => price : 800 }product 1 { variation 1 => price : 100 , variation 1 => price : 200 }product 2 { variation 3 => price : 150 , variation 4 => price : 50 }因为,产品 3 的价格比产品 2 最大。{    "status": true,    "message": "Product list found.",    "product_data_list": [        {            "product_id": "42",            "product_variations": [                {                    "details": {                        "variation_id": "88",                        "variation_image": "http://192.168.1.1",                        "variation_price": "100.00"                    }                },                {                    "details": {                        "variation_id": "89",                        "variation_price": "50.00"                    }                }            ]        },        {            "product_id": "54",            "product_variations": [                {                    "details": {                        "variation_id": "128",                        "variation_image": "http://192.168.1.1/",                        "variation_price": "4000.00"                    }                },                {                    "details": {                        "variation_id": "129",                        "variation_image": "http://192.168.1.1/",                        "variation_price": "200.00"                    }                }            ]        },
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

您可以使用PHP usort:https : //www.php.net/manual/en/function.usort.php


基本上,usort($array, "cmp")将对来自 2 个元素的cmp($a,$b)每个组合执行回调函数,返回时置于上方,返回时置于下方,返回时不执行任何操作。请注意,排序算法使用推导,因此它只需要计算所有可能对的子集。($a,$b)$array$a$b1$a$b-10($a, $b)


在这里,我使用比较函数cmp2对产品的每个变体进行排序以获得 index 处的最高价格0,然后我使用cmp1它们按最高变体价格对产品进行排序:


usort($data->product_data_list, "cmp1");

print_r($data->product_data_list);


function cmp1($a, $b){

    usort($a->product_variations, "cmp2");

    usort($b->product_variations, "cmp2");

    if ($a->product_variations[0]->details->variation_price == $b->product_variations[0]->details->variation_price) {

        return 0;

    }

    return ($a->product_variations[0]->details->variation_price > $b->product_variations[0]->details->variation_price) ? -1 : 1;

}


function cmp2($a, $b){

    if ($a->details->variation_price == $b->details->variation_price) {

        return 0;

    }

    return ($a->details->variation_price > $b->details->variation_price) ? -1 : 1;

}

输出:


stdClass Object

(

    [status] => 1

    [message] => Product list found.

    [product_data_list] => Array

        (

            [0] => stdClass Object

                (

                    [product_id] => 54

                    [product_variations] => Array

                        (

                            [0] => stdClass Object

                                (

                                    [details] => stdClass Object

                                        (

                                            [variation_id] => 128

                                            [variation_image] => http://192.168.1.1/

                                            [variation_price] => 4000.00

                                        )


                                )


                            [1] => stdClass Object

                                (

                                    [details] => stdClass Object

                                        (

                                            [variation_id] => 129

                                            [variation_image] => http://192.168.1.1/

                                            [variation_price] => 200.00

                                        )


                                )


                        )


                )


            [1] => stdClass Object

                (

                    [product_id] => 55

                    [product_variations] => Array

                        (

                            [0] => stdClass Object

                                (

                                    [details] => stdClass Object

                                        (

                                            [variation_id] => 135

                                            [variation_image] => http://192.168.1.1/

                                            [variation_price] => 2600.00

                                        )


                                )


                            [1] => stdClass Object

                                (

                                    [details] => stdClass Object

                                        (

                                            [variation_id] => 133

                                            [variation_image] => http://192.168.1.1/RGB_api/DUMMY

                                            [variation_price] => 1600.00

                                        )


                                )


                            [2] => stdClass Object

                                (

                                    [details] => stdClass Object

                                        (

                                            [variation_id] => 134

                                            [variation_image] => http://192.168.1.1/RGB_api/DUMMY

                                            [variation_price] => 1200.00

                                        )


                                )


                        )


                )


            [2] => stdClass Object

                (

                    [product_id] => 42

                    [product_variations] => Array

                        (

                            [0] => stdClass Object

                                (

                                    [details] => stdClass Object

                                        (

                                            [variation_id] => 88

                                            [variation_image] => http://192.168.1.1

                                            [variation_price] => 100.00

                                        )


                                )


                            [1] => stdClass Object

                                (

                                    [details] => stdClass Object

                                        (

                                            [variation_id] => 89

                                            [variation_price] => 50.00

                                        )


                                )


                        )


                )


        )


)



查看完整回答
反对 回复 2022-01-02
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您使用 PHP 标记,但没有您的 PHP 逻辑。你能把它放在这里检查要做什么吗?

否则,解决方案可以是在 PHP 中解码 json 并在 PHP 逻辑中对其进行排序。之后,您可以将 PHP 变量编码为 json。看 :


查看完整回答
反对 回复 2022-01-02
  • 2 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号