・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年6月23日に投稿されました。)
PHPで文字列を逆順に並び替える関数として、strrev()があります。
strrev()とは指定した文字列の順番を逆にして返す関数となります。
例えば、「abcde」という文字列にstrrev()を使用すると、「edcba」が返されます。
しかし、全角の文字列は対応しておらず、もし指定すると、文字化けを起こしてしまいます。
また、int型の文字列を指定した場合でも、逆順に並び替えることができますが、string型になって返ってきますので注意が必要です。
そして、strrev()はパラメータとして文字列を指定するので、文字列はもちろん、配列の値を指定することも可能です。
今回はPHPのstrrev()で文字列を逆順に並び替える方法について紹介していきます。
strrev()とは
strrev()とは、文字列を逆順に並び替える関数になります。
例えば、「1234」という文字列にstrrev()を使用すると、「4321」という文字列を返すようになります。
strrev()の書き方
strrev()の書き方は下記のようになります。
1 | <?php strrev(‘逆順にしたい文字列’);?> |
strrev()はパラメータを一つ指定することで使用することができます。
strrev()のパラメータ
strrev()のパラメータは下記のようになります。
- 逆順にしたい文字列(必須):
逆に並び替えたい文字列を指定する
strrev()はパラメータとして「逆順にしたい文字列」を指定することで使用することができます。
strrev()で文字列を逆順に並び替えるサンプルコード
strrev()で文字列を逆順に並び替えるサンプルコードについてご紹介します。
ここでは下記の3つの場合でstrrev()を使用してみます。
- 逆順に並び替える文字列がstring型である場合
- 逆順に並び替える文字列がint型である場合
- 逆順に並び替える文字列が日本語である場合
逆順に並び替える文字列がstring型である場合
逆順に並び替える文字列がstring型である場合にstrrev()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $text1_1 = 'Hello Japan! 12345678910'; echo '変換前の文字列: '; var_dump($text1_1); $text1_2 = strrev($text1_1); echo '変換後の文字列: '; var_dump($text1_2); $text2_1 = 'Hello Japan! 123456789010'; echo '変換前の文字列: '; var_dump($text2_1); $text2_2 = strrev($text2_1); echo '変換後の文字列: '; var_dump($text2_2); ?> |
実行結果
strrev()によって指定したstring型が逆順に並び替えて表示されています。
そのため、「Hello Japan! 12345678910」が逆順に並び替えられています。
しかし、全角の文字列の場合は、対応しておらず文字化けが発生しています。
逆順に並び替える文字列がint型である場合
逆順に並び替える文字列がint型である場合にstrrev()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 | <?php $text3 = 12345678910; echo '変換前の文字列: '; var_dump($text3); $gg = strrev($ff); echo '変換後の文字列: '; var_dump($text3); ?> |
実行結果
strrev()によって指定したint型が逆順に並び替えて表示されています。
そのため、「12345678910」が逆順に並び替えられています。
しかし、string型として返されるようになります。
逆順に並び替える文字列が日本語である場合
逆順に並び替える文字列が日本語である場合にstrrev()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $text4_1 ='おはようございます'; echo '変換前の文字列: '; var_dump($text4_1); $text4_2 = strrev($text4_1); echo '変換後の文字列: '; var_dump($text4_2); $text5_1 ='オハヨウゴザイマス'; echo '変換前の文字列: '; var_dump($text5_1); $text5_2 = strrev($text5_1); echo '変換後の文字列: '; var_dump($text5_2); ?> |
実行結果
逆順に並び替える文字列に日本語を使用した場合は、対応していないため文字化けが発生しています。
strrev()で配列の値を逆順に並び替えるサンプルコード
strrev()で配列の値を逆順に並び替えるサンプルコードをご紹介します。
ここでは下記の2つの場合でstrrev()を使用してみます。
- 指定した配列の値を逆順に並び替える場合
- 指定した連動配列の値を逆順に並び替える場合
指定した配列の値を逆順に並び替える場合
指定した配列の値を逆順に並び替える場合にstrrev()を使用してみます。
ここでは、1次元配列と2次元配列の値を逆順に並び替えてみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $prefecture1 = ['Tokyo', 'Nagoya', 'Osaka', 'Fukuoka']; var_dump($prefecture1); $prefecture1_val = strrev($prefecture1[2]); echo '指定した配列の値: '; var_dump($prefecture1_val); $prefecture2 = [ ['Tokyo', 'Nagoya', 'Osaka', 'Fukuoka'], ['Yokohama','Kobe','Sendai'] ]; var_dump($prefecture2); $prefecture2_val = strrev($prefecture2[1][1]); echo '指定した配列の値: '; var_dump($prefecture2_val); ?> |
実行結果
指定した連想配列の値を逆順に並び替える場合
指定した連組配列の値にstrrev()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $prefecture3 = array( 'Tokyo' => 'Tokyo', 'Osaka' => 'Osaka', 'Aichi' => 'Nagoya', 'Fukuoka' => 'hakata', ); var_dump($prefecture); $prefecture3_val = strrev($prefecture3['Aichi']); echo '指定した連想配列の値'; echo $prefecture3_val; ?> |
実行結果
全角の文字列を逆順に並び替えたい場合
strrev()は全角文字には対応しておらず、仮に使用すると文字化けが起こってしまいます。
そのため、全角の文字列を逆順に並び替えるには、オリジナルの関数を作成する必要があります。
そのオリジナルの関数とは下記のようなコードになります。
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 31 | <?php $text8_1 ='おはようございます'; echo '変換前の文字列: '; echo $text8_1; $text8_2 = origin_strrev($text8_1); echo '変換後の文字列: '; echo $text8_2; $text9_1 ='天上天下唯我独尊'; echo '変換前の文字列: '; echo $ftext9_1; $text9_2 = origin_strrev($text9_1); echo '変換後の文字列: '; echo $text9_2; //ここから下がオリジナル関数 function origin_strrev($text) { $length= mb_strlen($text); $array = []; for ($i = 0; $i < $length; $i++){ $text_string = mb_substr($text,$i,1); array_push($array, $text_string); } $r_array = array_reverse($array); $arrayToText = implode($r_array); return $arrayToText; } ?> |
実行結果
オリジナルの関数を作成し、使用することで、全角の文字列を逆順に並び替えています。
また、コードの解説は下記のようになります。
- mb_substr()で対象文字列の文字を1つずつ切り取る
- 切り取った文字をarray_push()で配列に追加していく
- 1と2の処理を文字列の文字数分行う
- 配列に追加されたら、array_reverse()で値の順番を入れ替える
- 順番を入れ替えたら、implode()で配列に値を文字列にして表示する
strrev()で逆順に並び替えた文字列を元に戻す場合
strrev()で逆順に並び替えた文字列を元に戻すには、再びstrrev()を使用します。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $text10_1 = 'nevertheless'; echo '文字列変換前: '; echo $text10_1; $text10_2 = strrev($text10_1); echo '文字列変換後1: '; echo $text10_2; $text10_3 = strrev($text10_2); echo '文字列変換後2: '; echo $text10_3; ?> |
実行結果
strrev()で逆順に並び替えた文字列に対してもう一度、strrev()を使用することで、元に戻っていることが分かります。
そのため、逆順に並び替えられた「nevertheless」が元に戻っています。
まとめ
⚫︎ strrev()とは指定した文字列を逆順に並び替える関数である
⚫︎ strrev()を使用するには1つのパラメータが必須となる
・ 逆順にしたい文字列(必須)
⚫︎ strrev()にstring型の文字列を指定すると、文字列を逆順にして返す
⚫︎ strrev()にint型の文字列を指定すると、文字列を逆順にして返すが、string型になる
⚫︎ strrev()は日本語の文字列を指定すると文字化けする
(日本語は対応していない)
⚫︎ strrev()はパラメータとして配列の値を指定することができる
(普通の配列や連想配列でも可能)
⚫︎ strrev()は全角文字列を逆順に並び替えることができない
(全角文字列を逆順に並び替えたいなら、オリジナルの関数を作成する必要がある)
⚫︎ strrev()で逆順に並び替えた文字列を元に戻すには、再びstrrev()を使用する