首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按数组的值升序排序。先是较低的值,然后是较高的值

按数组的值升序排序。先是较低的值,然后是较高的值
EN

Stack Overflow用户
提问于 2021-08-16 10:07:17
回答 1查看 30关注 0票数 0

我正在寻找一种基于值对数组进行排序的解决方案。最小值将分别出现在最小值和较高值之前。

取值如下(“某些取值需要英寸sing ):

代码语言:javascript
运行
复制
array( '1/3', '1/4', '1', '4"', '18 11/12"', '18 1/4"', '2-3/8', '3-3/9' )

我为此创建的代码是

代码语言:javascript
运行
复制
$array=array( '1/3', '1/4', '1','4"', '18 11/12"', '18 1/4"', '2-3/8', '3-3/9');

foreach( $array as $k=>$v )
{
    $copy[$k] = preg_match("/(\d+)\/(\d+)/",$v,$m)?$m[1]/$m[2]+(int)$v:(int)$v;
}

array_multisort( $copy, SORT_NUMERIC, $array );

print_r( $array );

预期结果

代码语言:javascript
运行
复制
array( '1/4', '1/3', '1', '2-3/8', '3-3/9', '4"', '18 1/4"', '18 11/12"' );
EN

回答 1

Stack Overflow用户

发布于 2021-08-16 12:06:42

我更新的代码如下,它给出了我想要的输出。如果你想要这种排序方式,希望这篇文章能对你有所帮助。

代码语言:javascript
运行
复制
function fractionToDecimal( $fraction ) 
{
    preg_match('/^(?P<whole>\d+)?\s?((?P<numerator>\d+)\/(?P<denominator>\d+))?$/', $fraction, $components);

    $whole = $components['whole'] ?: 0;
    $numerator = $components['numerator'] ?: 0;
    $denominator = $components['denominator'] ?: 0;

    $decimal = $whole;
    $numerator && $denominator && $decimal += ($numerator/$denominator);

    return $decimal;
}

$copy  = array();
$array = array('1/3','1/4','1','4"','18 11/12"','18 1/4"','2-3/8','3-3/9');

foreach( $array as $k => $v )
{
    $midval = round(fractionToDecimal($v),2);

    if( $midval == 0 )
    {
        $copy[$k] = preg_match("/(\d+)\/(\d+)/",$v,$m)?$m[1]/$m[2]+(int)$v:(int)$v;
    }
    else
    {
        $copy[$k] = $midval;
    }
}
array_multisort( $copy, $array );
print_r( $array );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68800968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档