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]='2012 年 12 月 31 日' b[4][6]='2012 年 12 月 31 日'

上記のトリッキーな要素の違いにより、両方の配列をソートすると異なる結果が得られます。分析のために各行で 1 対 1 の一致を行う必要があるため、適切に並べ替える必要があります。

これらの配列を「スマート」ソートして同じ結果を得る方法を提案してください

私はのラインで何かを試しました

                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