Php 如何对英制值数组进行排序(带分数的英寸)?
我使用以下代码使用本机排序算法对值进行排序Php 如何对英制值数组进行排序(带分数的英寸)?,php,arrays,sorting,fractions,Php,Arrays,Sorting,Fractions,我使用以下代码使用本机排序算法对值进行排序 usort($this->_items, function($a, $b) { return strnatcasecmp($a['label'], $b['label']);}); 但问题是,它没有为以下各项正确排序值: $array=array( '18"', '4"', '18 1/2"', '18 1/4"'); 它应该按照以下顺序对值进行排序 4" 18" 18 1/4" 18 1/2" 有没有办法用PHP代码获得这种排序?谢谢。
usort($this->_items, function($a, $b) { return strnatcasecmp($a['label'], $b['label']);});
但问题是,它没有为以下各项正确排序值:
$array=array( '18"', '4"', '18 1/2"', '18 1/4"');
它应该按照以下顺序对值进行排序
4"
18"
18 1/4"
18 1/2"
有没有办法用PHP代码获得这种排序?谢谢。这里有一个小解决方案(): 输出:
array (
0 => '4"',
1 => '18"',
2 => '18 1/4"',
3 => '18 1/2"',
4 => '18 11/12"',
)
foreach()
迭代$array
并调用每个值以生成$copy
数组值。如果包含尾随分数,则分数将转换为十进制格式并添加到整数,否则字符串值将转换为整数
然后使用
$copy
对$array
进行排序。完成了 这里有一个紧凑的小解决方案():
输出:
array (
0 => '4"',
1 => '18"',
2 => '18 1/4"',
3 => '18 1/2"',
4 => '18 11/12"',
)
foreach()
迭代$array
并调用每个值以生成$copy
数组值。如果包含尾随分数,则分数将转换为十进制格式并添加到整数,否则字符串值将转换为整数
然后使用
$copy
对$array
进行排序。完成了 我今天遇到了一个非常类似的问题,唯一的区别是数字格式略有不同
5/8
1-3/4
2-13/54
54/64
在这种风格中,我的正则表达式解决方案是
preg_match_all("/(^.*?)-?(\d+)\/(\d+)/",$input,$matches)
与提供的答案相比,此方法的主要优点是,第一个捕获组始终与整数匹配,如果您必须为以前的正则表达式提供0 5/8或0-5/8,您可以简单地让正则表达式将第一个捕获组保留为空。在那之后,事情就这么简单了
$decimalConversion = $matches[2]/$matches[3]+$matches[1]
如果您对$matches[0]感兴趣,它将返回所有匹配项。此外,整数不与此正则表达式匹配,但由于您确实不需要对这些整数进行任何转换,只要它们仍保留在数组中,您应该仍然能够正确地进行排序
此外,我还从中引入了array\u msort,作为array\u multisort更易于阅读和使用的替代方案
之后,我使用array\u values($array)将键重置为新的排序,并通过直接写入eav\u attribute\u option表将键作为值的选项id的排序顺序传递回magento。我今天遇到了一个非常类似的问题,唯一的区别是数字格式略有不同 5/8 1-3/4 2-13/54 54/64 在这种风格中,我的正则表达式解决方案是
preg_match_all("/(^.*?)-?(\d+)\/(\d+)/",$input,$matches)
与提供的答案相比,此方法的主要优点是,第一个捕获组始终与整数匹配,如果您必须为以前的正则表达式提供0 5/8或0-5/8,您可以简单地让正则表达式将第一个捕获组保留为空。在那之后,事情就这么简单了
$decimalConversion = $matches[2]/$matches[3]+$matches[1]
如果您对$matches[0]感兴趣,它将返回所有匹配项。此外,整数不与此正则表达式匹配,但由于您确实不需要对这些整数进行任何转换,只要它们仍保留在数组中,您应该仍然能够正确地进行排序
此外,我还从中引入了array\u msort,作为array\u multisort更易于阅读和使用的替代方案
之后,我使用array_values($array)将键重置为新的排序,并通过直接写入eav_attribute_选项表将键作为值的选项id的排序顺序传递回magento。@p4pravin如果这不能正确排序所有可能的大小,请更新您的问题,以提供我的方法失败时的示例输入,我将修复我的代码。@p4pravin如果这不能正确排序所有可能的大小,请更新您的问题,以提供我的方法失败时的示例输入,我将修复我的代码。