いつまで続くのか、何を書くのか、それもまた流れのままに 頭の中にまとまらないものがあるから そんなのがふと出た時に書いていく
僕のネット帳
スポンサーサイト
-----------  CATEGORY: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ページトップへ
PHP配列:任意の文字列で並べ替えを行いたい
2008-01-14-Mon  CATEGORY: php
ということで、普通に配列の並べ替えをやるのではなくて希望の場所を比較したい。
例えば、
配列1:おかん11歳test_101.html
配列2:かまぼこ111円test_22.html
配列3:あいどるプライスレスtest_3570.html
配列4:うめぼしすっぱい_test_1248.html

というのがあったとしよう。
これの.htmlの前の数字で並べ換えを行いたい。
ということで作ってみた。

<?php

/*_と.html間の数字を比較して小さい順に並べる*/

//***比較用関数
function cmp($a,$b){

//***任意の文字列を取得する
//***ここでは_&数字の連続&.htmlの部分を取得
//***例えばaaa_999.htmlなら_999.htmlの部分
ereg('_[0-9]+\.html',$a,$match_url_a);
ereg('_[0-9]+\.html',$b,$match_url_b);

//***取得した部分から数字の連続のみ抜き出し->>999とか
ereg('[0-9]+',$match_url_a[0],$match_a);
ereg('[0-9]+',$match_url_b[0],$match_b);

//***数字の大小を比較
if($a == $b) {
return 0;
} else if($match_a > $match_b) {
return 1;
} else {
return -1;
}
}

$aaa = array("おかん11歳test_101.html",
"かまぼこ111円test_22.html",
"あいどるプライスレスtest_3570.html",
"うめぼしすっぱい_test_1248.html");

print_r($aaa);

//***関数使った配列ソート
usort($aaa,"cmp");

echo '<br />';
print_r($aaa);

?>

表示結果は、
配列1:おかん11歳test_101.html
配列2:かまぼこ111円test_22.html
配列3:あいどるプライスレスtest_3570.html
配列4:うめぼしすっぱい_test_1248.html

であったのが

配列1:かまぼこ111円test_22.html
配列2:おかん11歳test_101.html
配列3:うめぼしすっぱい_test_1248.html
配列4:あいどるプライスレスtest_3570.html

となる。

ちなみに[0-9]+は数字の繰り返し。
マッチングには以下のようなのができる。
$rcd = ereg("abc", $var); abc にマッチ
$rcd = ereg("a.c", $var); a?c にマッチ
$rcd = ereg("a(bb|b1|b2)c", $var); abbc、ab1c、ab2c にマッチ
$rcd = ereg("^abc", $var); abc で始まるとマッチ
$rcd = ereg("abc$", $var); abc で終わるとマッチ
$rcd = ereg("^$", $var); 空行とマッチ
$rcd = ereg("ab?c", $var); ac、abc にマッチ
$rcd = ereg("a.*c", $var); ac、abc、ab1c などにマッチ
$rcd = ereg("a.+c", $var); abc、ab1c などにマッチ
$rcd = ereg("[0-9]{1, 2}", $var); 0 ~ 99 にマッチ
$rcd = ereg("[a-zA-Z]{8,}", $var); 英字 8 文字以上にマッチ
$rcd = ereg("あいうえお{2}", $var); 「あいうえおお」にマッチ
$rcd = ereg("(あいうえお){2}", $var); 「あいうえおあいうえお」にマッチ
だそうな。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm

あと正規表現で混乱しそうなやつ。
?についてメモ。
マッチするのはタイトル直前にある<br>から「周辺地図」の直前にある<li>まで。<li>が5個あるのですが、この正規表現では一番最後にある<li>までマッチしてしまうのです。

それは、最長一致というルールがあるからなんです。
そのため、ルールに当てはまる一番最長の部分までがヒットしてしまうのです。

このままではいらない部分までマッチしてしまうので、最初に見つけた<li>までにマッチさせたいときはどうすればいいでしょうか?
実はさっきの正規表現で「.+」の後に「?」をつければ、最短一致になるので思った通りの部分が抜き出せるようになるのです。
http://shain.tomocreative.net/2007/05/post_8.html
ページトップへ  トラックバック0 コメント0
コメント

管理者にだけ表示を許可する
 
トラックバック
TB*URL
<< 2017/06 >>
S M T W T F S
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


余白 Copyright © 2005 僕のネット帳. all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。