让我们说,我有一个这样的数组:
$arr = array('M', '38', '37', '3XL', 'XL', '39', 'L', 'S', '36', '41', '40', 'XXL');
(其数组中包含客户要订购的当前商品的可用尺码)
如何对它进行升序排序(第一个alpha尺寸:S,M,L,XL,XXL,3XL;然后是数字尺寸:36,37,38,39,40,41),所以我会得到数组:
$res = array('S', 'M', 'L', 'XL', 'XXL', '3XL', '36', '37', '38', '39', '40', '41');
是否有某些功能可以做到这一点?
答案 0 :(得分:2)
如果定义了大小,那么您可以让$baseArr
包含所有有效大小,并根据该大小对当前arr进行排序
function sortSizeArr($arr) {
$baseArr = array('S', 'M', 'L', 'XL', 'XXL', '3XL', '36', '37', '38', '39', '40', '41');
$sortedArr = array();
for($i = 0; $i < count($baseArr); $i++) {
if(in_array($baseArr[$i], $arr))
array_push($sortedArr, $baseArr[$i]);
}
return $sortedArr;
}
测试:
$sizes = array('M', '38', 'S', '36', '41', '40', 'XXL');
print_r(sortSizeArr($sizes));
阵列([0] =&gt; S [1] =&gt; M [2] =&gt; XXL [3] =&gt; 36 [4] =&gt; 38 [5] =&gt; 40 [6] =&GT; 41)
由Legionar编辑:
我正在调用此函数,只有在存在alpha大小且没有数字大小的情况下。有些尺寸是f.e. M/5, L/6, XL/7, XXL/8
,所以我改变了你的功能。这对我有所帮助,谢谢:
function sortSizeArr($arr) {
$baseArr = array('XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL', '3XL');
$sortedArr = array();
for ($i = 0; $i < count($baseArr); $i++) {
/*if (in_array($baseArr[$i], $arr)) {
array_push($sortedArr, $baseArr[$i]);
}*/
foreach ($arr as $val) {
$check = reset(explode('/', $val));
if (strpos($val, $baseArr[$i]) === 0) {
array_push($sortedArr, $val);
}
}
}
return $sortedArr;
}
答案 1 :(得分:1)
答案 2 :(得分:1)
以下是按字母顺序排列数组的另一个示例:
<?php
$array = array('M', '38', '37', '3XL', 'XL', '39', 'L', 'S', '36', '41', '40', 'XXL');
foreach ($array as $key => $value) {
if (ctype_digit($value)) {
$array[$key] = intval($value);
}
}
sort($array);
echo "After Sorting".'<pre>';
print_r($array);
echo '</pre>';
?>
供您参考和输出Click Here
答案 3 :(得分:1)
如果您需要数字大小,您可以执行以下操作:
function size_sort($a, $b) {
return determine_value($a) < determine_value($b) ? -1 : 1;
}
function determine_value($var) {
$letter_sizes = array("S" => 1, "M" => 2, "L" => 3, "XL" => 4, "XXL" => 5, "3XL" => 6);
if(array_key_exists($var, $letter_sizes))
return $letter_sizes[$var];
elseif(is_numeric($var))
return $var + 100; // add 100 so its value is higher than any letter sizing
else
return 10000; // unknown size, make sure it is at the end
}
usort($arr, "size_sort");
我添加了一个其他条件,如果遗漏任何字母大小(即XS,4XL等)
答案 4 :(得分:1)
添加变体。仅建议大小不超过7:
$arr = array('M', '38', '37', '3XL', 'XL', '39', 'L', 'S', '36', '41', '40', 'XXL');
$sizes = array('S', 'M', 'L', 'XL', 'XXL', '3XL');
var_export($arr);
usort($arr, function ($a, $b){
global $sizes;
$a = is_numeric($a) ? $a : array_search($a, $sizes);
$b = is_numeric($b) ? $b : array_search($b, $sizes);
return $a-$b;
});
var_export($arr);