これは修正する必要があり、前進することがないと仮定すると、sort
を使用して問題を整理することをお勧めします。あなたがそうのように、アレイ内のすべてのものを英数字順のフィールドを持っているとしましょう:
$vals = array (
'12342313A',
'12342313D',
'12342313E',
'12342313B',
'12342313C'
);
ものがすべてではないために、混同されています。しかし、あなたはその配列に機能sort
(docs)を呼び出すことができますし、PHPはそれのうち感を作るまともな仕事をしていません:
print '<pre>Unsorted: ';
print_r($vals);
print '</pre>';
sort($vals);
print '<pre>Sorted: ';
print_r($vals);
print '</pre>';
/*
Unsorted: Array
(
[0] => 12342313A
[1] => 12342313D
[2] => 12342313E
[3] => 12342313B
[4] => 12342313C
)
Sorted: Array
(
[0] => 12342313A
[1] => 12342313B
[2] => 12342313C
[3] => 12342313D
[4] => 12342313E
)
*/
これまでのところ、とても良いです。今すぐ注文しました。ボーナスとして、データベースの新しいフィールドとして配列のインデックスを使用することができます。テーブルを変更し、新しい値を保持するフィールドを追加します。このフィールドをnumeric_order
と呼びます。私のサンプルでは、英数字のソートデータが現在保持されているフィールドをstring_order
と呼びました。ループあなたのソートされた配列と(例えば)データベースを更新します。
foreach ($vals as $x=>$v) {
$sql = 'UPDATE myTable SET numeric_order = '.($x+1).' WHERE string_order = "'.$v.'"';
}
私はあなたの順序のため0
を持っているために何かをしたくないという仮定に基づいて、ループ内でx
に1を追加 - 「はISNの場合心配しなければ、x
を使うことができます。これは、2行に同じ英数字ソート値がないことを前提にしています。
もしそうなら、すべてが失われません!
$vals = array (
3=>'12342313A',
15=>'12342313D',
66=>'12342313E',
101=>'12342313B',
200=>'12342313C'
);
...数字キーは、対応する行の一意/主キーを表します。私の基本前提が間違っている、とあなたは続けるよ場合
$ord = 1
foreach ($vals as $x=>$v) {
$sql = 'UPDATE myTable SET numeric_order = '.$ord.' WHERE id = "'.$x.'"';
$ord++;
}
:、その後、あなたのループはこのようになります - 代わりに、キーを保存する(docsたキーを保存しない)asort
を使用していないsort
、の行の並べ替えの方法に対処するには、私の謙虚な視点でデータ設計を再検討する必要があります。
注:文字の数値(ASCIIの表現など)を探しているのではなく、**の序数**の値文字。非常にはっきりと違う - 私はそれを書くことができたら、私はあなたの質問のタイトルを変更することをお勧めします。 –
@ Chris--はい、あなたは正しいです。先端に感謝します – julio
手紙はどれくらいの高さですか? 'F'? 'Z'?彼らは '1'や' A'に折り返されますか? – webbiedave