PHPで文字列を反転させる

            <div class="section">

来週の新卒研修コードレビューのテーマらしい。

ぱっと思いついた方法だけ載せてとく。

<?php
//strrevは使わない
$str = 'Hello. Nice to meet you.';
echo str_reverse($str);
echo str_reverse2($str);
function str_reverse($str) {
$_str = '';
for ($i = 1;$i <= strlen($str);$i++) $_str .= substr($str, $i * -1, 1);
return $_str;
}
function str_reverse2($str) {
$_str = '';
for ($i = strlen($str) - 1;$i >= 0;$i--) $_str .= $str[$i];
echo $_str;
}

swapでやる方法。

<?php
$str = 'Hello. Nice to meet you.';
echo str_reverse3($str);
function str_reverse3($str) {
$forword  = 0;
$backword = strlen($str) - 1;
while ($forword < $backword) {
list($str[$forword], $str[$backword]) = array($str[$backword], $str[$forword]);
$forword++;
$backword--;
}
return $str;
}

for, foreach, while などのループをつかわない

<?php
$str = 'Hello. Nice to meet you.';
echo str_reverse4($str);
function str_reverse4($str, $re_str = '') {
if (strlen($str) === 0) return $re_str;
$rest_str = substr($str, 0, -1);
$re_str  .= substr($str, -1);
return str_reverse4($rest_str, $re_str);
}

MySQLの CREATE TABLE ... LIKE ...

            <div class="section">

同じカラムで別テーブルをつくるときには CREATE TABLE to_table LIKE from_table; が便利。

ただし、データはコピーされないことに注意。

CREATE TABLE hoge_0 (
id int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (id)
);
CREATE TABLE hoge_1 LIKE hoge_0;
SHOW CREATE TABLE hoge_1;
| hoge_1 | CREATE TABLE `hoge_1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

PHPのrange

            <div class="section">

array(1000, 900, 800, 700, 600, 500, 400, 300, 200, 100);

みたいに-100刻みの配列をつくりたくてなにか良い方法はないかと考えた。

そこでよく使っているPHPのrange関数でできるのかなーと思ってdocをみてみた。

※値が増加するパターンでしか使ったことなかった。・・・と思う。

するとこんな記載が。

Description
  array range  ( mixed $low  , mixed $high  [, number $step = 1  ] )
Return Values
  Returns an array of elements from low to high, inclusive. If low > high, the sequence will be from high to low.

どうやら引数の$low>$highの場合は今回やりたいことができそうだ。

ということでやってみた。

$hoge = range(1000, 100, -100);
var_dump($hoge);
array
0 => int 1000
1 => int 900
2 => int 800
3 => int 700
4 => int 600
5 => int 500
6 => int 400
7 => int 300
8 => int 200
9 => int 100

引数の名前が気持ち悪いけど、とりあえずできたのでよかった。

※fucntion range($from, $to, $step) の方が個人的にはわかりやすいなと思う。

subversionで特定のファイルをignoreで無視する

            <div class="section">
sample/
|-- controllers
|-- logs
|-- models
`-- views

みたいな構造があったときに、sample/logs 以下は特にversion管理する必要がないファイルがどんどんたまっていくと仮定しようじゃないか。

で、この logs ディレクトリ以下をsubverionの管理から無視する方法。

svn propedit svn:ignore sample/logs

上のように打つとエディタが開くので、無視したいファイル名を改行で区切って書いておく。

全部無視したい時は、ワイルドカード(*)とかだけでいいお。

後は保存して、svn commitするだけ。