【发布时间】:2021-01-05 08:17:43
【问题描述】:
我必须根据价格或大小对多维数组进行排序,但问题是,它有一个问题,它排序的第一个数组总是错误的,我尝试使用 usort 等,但它们都给出了相同的结果,我们有一个需要根据价格或尺寸分类的产品列表。我找到了很多答案,但问题仍然存在。产品应根据价格排序,即从低到高或尺寸将按宽度排序,例如产品尺寸 120 x 60,因此 120 是宽度,它应该是最后一个产品
对多维数组进行排序的函数
function array_sort($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array; }
这是我要排序的数组
$sortingArray = Array(
'0' => Array(
'id' => 1287,
'data-price' => '£209.95',
'size' => '120 x 60'
),
'1' => Array(
'id' => 1263,
'data-price'=> '£14.95',
'size' => '18 x 13'
),
'2' => Array(
'id' => 1264,
'data-price' => '£15.95',
'size' => '20 x 15'
),
'3' => Array(
'id' => 1245,
'data-price' => '£29.95',
'size' => '30 x 20'
),
'4' => Array
(
'id' => 1315,
'data-price' => '£39.95',
'size' => '50 x 13'
),
'5' => Array(
'id' => 1275,
'data-price' => '£94.95',
'size' => '60 x 40'
),
'6' => Array
(
'id' => 1281,
'data-price' => '£119.95',
'size' => '75 x 50'
),
);
输出结果
$rectangleProductDetails = array_sort($sortingArray, 'size', SORT_ASC);
print_r($rectangleProductDetails);
【问题讨论】:
-
首先正确解释如何您希望这些项目按大小排序。这些看起来像宽度/高度值或其他东西 - 所以首先在这里执行这些公式中包含的“乘法”可能是最有意义的,这样产品就可以按表面积排序......?
-
@CBroe no product can't be sorted based on the surface area, 它应该是价格,或者如果我们选择尺寸,那么它应该是宽度,例如产品尺寸 120 x 60 所以 120 是宽度,它应该是最后一个产品