混合文字列を含む並べ替えの配列に問題があります。混合文字列PHPを含む配列を並べ替える
文字列に数字と文字の両方が含まれています。私は文字列に含まれる整数値で配列をソートしたい。
ソート順はアルファベット順にする必要があります。
Result配列とMy Required配列を見てください。私は配列をソートするために使用しています
私の現在のアレイ
Array
(
[0] => Array
(
[title] => B2(14) Lorem ipsum dolor sit amet
)
[1] => Array
(
[title] => G3(14) consectetur adipiscing elit
)
[2] => Array
(
[title] => A3(14) Lorem ipsum dolor sit amet
)
[3] => Array
(
[title] => B13(16) consectetur adipiscing elit
)
[4] => Array
(
[title] => A13(16) consectetur adipiscing elit
)
[5] => Array
(
[title] => A13(15) consectetur adipiscing elit
)
[6] => Array
(
[title] => D13(15) Lorem ipsum dolor sit amet
)
[7] => Array
(
[title] => A13(13) consectetur adipiscing elit
)
)
機能は
uasort($array,'my_post_sort');
function my_post_sort($a,$b) {
$akey = $a['title'];
if (preg_match_all('/\d+/',$akey,$matches)) {
$akey = sprintf('%010d ',$matches[0][1]);
}
$bkey = $b['title'];
if (preg_match_all('/\d+/',$bkey,$matches)) {
$bkey = sprintf('%010d ',$matches[0][1]);
}
if ($akey == $bkey) {
return 0;
}
return ($bkey > $akey) ? 1 : -1;
}
その結果は以下の通りです私は、コードの上に使用して取得していますが
Array
(
[3] => Array
(
[title] => B13(16) consectetur adipiscing elit
)
[4] => Array
(
[title] => A13(16) consectetur adipiscing elit
)
[5] => Array
(
[title] => A13(15) consectetur adipiscing elit
)
[6] => Array
(
[title] => D13(15) Lorem ipsum dolor sit amet
)
[0] => Array
(
[title] => B2(14) Lorem ipsum dolor sit amet
)
[1] => Array
(
[title] => G3(14) consectetur adipiscing elit
)
[2] => Array
(
[title] => A3(14) Lorem ipsum dolor sit amet
)
[7] => Array
(
[title] => A13(13) consectetur adipiscing elit
)
)
以下のようである何私の要件であることは以下の通りである
Array
(
[0] => Array
(
[title] => A3(14) Lorem ipsum dolor sit amet
)
[1] => Array
(
[title] => B2(14) consectetur adipiscing elit
)
[2] => Array
(
[title] => G3(14) Lorem ipsum dolor sit amet
)
[3] => Array
(
[title] => A13(16) consectetur adipiscing elit
)
[4] => Array
(
[title] => B13(16) consectetur adipiscing elit
)
[5] => Array
(
[title] => A13(15) consectetur adipiscing elit
)
[6] => Array
(
[title] => D13(15) Lorem ipsum dolor sit amet
)
[7] => Array
(
[title] => A13(13) consectetur adipiscing elit
)
)
左括弧の前の文字だけをソートしていますか?そうであれば、整数が同じであれば、2番目のソート条件は何ですか? – Chris
必要な並べ替えはローカルでのみソートされています。このループを一般的なループで解決することはできません。私は3つのループに賭ける:(1)文字列の分割/分解とグループ分け(顺序の順)、(2)(1)で作成したサブグループと再構成のための別のもの(3) ))。 – shudder