在PHP中排序时忽略前导零和日期格式的智能排序

在PHP中排序时忽略前导零和日期格式的智能排序,php,Php,我有一个php脚本,可以对2个多维数组进行排序。现在,如果我使用普通数组\u multisort,它会混淆某些行的两个数组,因为这两个数组都有一些棘手的元素 例:a[2][2]='35' 和b[2][2]=“0035” 此外,a[3][4]='+0.03' b[3][4]='+.03' [4][6]=“31-12-2012” b[4][6]=“2012年12月31日” 由于上述棘手的元素差异,两个数组的排序结果不同。我需要对它们进行适当的排序,因为我的req需要在每一行中进行一次匹配,以便进行分

我有一个php脚本,可以对2个多维数组进行排序。现在,如果我使用普通数组\u multisort,它会混淆某些行的两个数组,因为这两个数组都有一些棘手的元素

例:a[2][2]='35' 和b[2][2]=“0035”

此外,a[3][4]='+0.03' b[3][4]='+.03'

[4][6]=“31-12-2012” b[4][6]=“2012年12月31日”

由于上述棘手的元素差异,两个数组的排序结果不同。我需要对它们进行适当的排序,因为我的req需要在每一行中进行一次匹配,以便进行分析

请建议如何对这些数组进行“智能”排序以获得相同的结果

我试过一些类似的东西

                function sort2dArray($data) {
                    $tmp = array();
                    $lineCount = count($data);
                    foreach ($data as $lineNum => $lineData) {
                        foreach ($lineData as $column => $value) {
                            $tmp[$column][$lineNum] = standardize($value);
                        }
                    }

                    $multiSortArgs = array();
                    foreach ($tmp as $column => $columnData) {
                        array_push($multiSortArgs, $columnData, SORT_ASC);
                    }
                    $multiSortArgs[] = &$data;
                    call_user_func_array('array_multisort', $multiSortArgs);
                    return $data;
                }



                function standardize($value)
                {
                    if(is_numeric($value))
                        $pval= $value + 0;
                    else
                        $pval= $value;

                    return $pval;
                }
更新:以“,”作为分隔符的两个数组的o/p…仅考虑0035和35大小写

            BA2063,,,110Y,EFW
            BA2063,,,110Y,EFW
            BA2063,,,110Y,EFW
            BA2063,,,121H,ECD
            BA2063,,,121H,ECD
            BA2063,,,121H,ECD
            BA2063,,,0035,ESW
            BA2063,,,0035,EFW
            BA2063,,,0035,EFW
            BA2063,,,0035,EFW
            BA2063,,,1L9M,EFW






            BA2063,,,1L9M,EFW
            BA2063,,,35,ESW
            BA2063,,,35,EFW
            BA2063,,,35,EFW
            BA2063,,,35,EFW
            BA2063,,,110Y,EFW
            BA2063,,,110Y,EFW
            BA2063,,,110Y,EFW
            BA2063,,,121H,ECD
            BA2063,,,121H,ECD
            BA2063,,,121H,ECD

您的问题很难理解,因为您有多种类型的数据和多种格式的日期。 如果您使用混合dateFormat,我建议您使用这种函数过滤数组:

$authorizedFormats= ['Y-m-d','m/d/Y'];//give all your format, be careful inside the order to avoid abiguity mess

$filterVarOptions =['options'=>function($var)use($authorizedFormats){
             foreach($authorizedFormats as $value){
                  $date = DateTime::createFromFormat($value,$var);
                  if($date !==false){
                      return $date;
                  }
             }
           return new DateTime('01/01/70');
         }];
 array_walk($yourMultiDimArray,function($var)use($filterVarOptions){
          foreach($var as &$value)
            $value = filter_var($value,FILTER_CALLBACK,$filterVarOptions);
       });       

你能用var dump显示两个数组的结果吗?这样我们可以得到一个简短的提示。听起来你的输入数据源质量很低。一个管理良好的系统首先不应该为您提供混合格式的数据(特别是不混合日期格式——考虑到您对日期可能存在的模糊性,这是自找麻烦)@SDC同意,但确实帮不上忙。我现在需要找到一些方法来解决这个问题。除非你知道预期的格式,否则日期将是一个问题<代码>2012年12月31日可能很明显,但什么日期是2012年3月12日?它与2012年3月12日的代码相同吗?除非您能提前告诉它格式是什么,否则PHP的默认猜测是这两个不同的日期。@SDC its 12-31-2012,其格式为mm dd yyyy。这会影响PHP的排序吗。我认为PHP可以很好地对不同格式的日期进行排序。如果您有一个DateTime对象,它可以使用默认操作符进行排序。