【发布时间】:2014-12-09 15:16:21
【问题描述】:
我正在尝试使用从已解析的 CSV 文件创建的数组来创建多排序功能。
这是这个数组的输出示例
Array (
[1] => Array
(
[attribute_set] => Area Rug
[baybin] => 19B
[refnumber] =>
[sku] => 3K34302300
[rug_size] => 5 x 8
[collection] => Suncoast
[style] => Brooke
[stylenumber] => 3K343
[colorname] => Sage
[colornumber] => 02300
[weight] => 15.0000
[sold_on] => Overstock
[shape] => Rectangle
[yarn] => Olefin
[construction] => Woven
[qty] => 58.0000
)
[16] => Array
(
[attribute_set] => Area Rug
[baybin] => 33C
[refnumber] => 746916
[sku] => 3K46500100
[rug_size] => 5 x 8
[collection] => Grace Bay
[style] => Beige
[stylenumber] => 3K465
[colorname] => Beige/natural
[colornumber] => 00100
[weight] => 27.0000
[sold_on] => Amazon
[shape] => Rectangle
[yarn] =>
[construction] => Woven
[qty] => 0.0000
)
我最初的想法
我将通过 $_GET 发送排序和过滤参数。
格式看起来像
products.php?C:Suncoast,s:,Z:8 x 10
使用该格式,我将首先对从 CSV 创建的数组的全部内容进行多重排序,如下所示。
例如,大写字母 C 代表集合降序,小字母 s 代表大小升序。
字母后面的冒号表示我要过滤的值。AFTER数组已排序。
我的目标是将这些类型结合起来;就像在 SQL 中你可以按几列排序一样。
所以,我想出的唯一解决方案是通过循环遍历解析的 GET 变量并创建一个我会这样调用的单个字符串来创建一个动态字符串
eval("array_multisort($evalstring);");
据我所知,array_multisort 只能被调用一次,如果我期望多重排序功能,即先按集合排序,然后按数量排序。
也许?
也许我做错了?有没有更好的方法来实现这一点?它的用途是对产品进行排序(以及过滤它们)以缩小列表范围。
【问题讨论】:
-
你说“s”代表“尺寸升序”,但给定的数据只有“rug_size”..是一样的吗?
-
另外,
s将是Shape Ascending。z是尺寸 (rug_size) -
php.net/manual/en/function.array-multisort.php#68450 似乎是一个潜在的解决方案,但它已经有 8 年历史了。
标签: php csv array-multisort