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