0

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

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

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

a[4][6]='31-12-2012' b[4][6]='12/31/2012'

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

请建议我如何继续对这些数组进行“智能”排序以给出相同的结果

我已经尝试过

                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
4

1 回答 1

0

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

$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);
       });       
于 2013-02-14T11:33:00.120 回答