背景
dreddでapiテストを作成している。
テストデータを作成するときに使用するidを取得したい。
そのためにパスからidを取得する。
環境
PHP 7.3.22
末尾のidを取得する
$path = '/users/30';
$id = intval(basename($path));
var_dump($id);
結果
int(30)
やっていること
basenaemでパスの末尾の文字列を取得する
intvalで整数型に変換する
idがパスの途中にある場合
idが末尾になるようにパスから末尾の文字列をトリムすればいい
$path = '/users/30/admin';
$id = intval(basename(rtrim($path, '/admin')));
var_dump($id);
結果
int(30)
ちょっと沼ったのでメモ
basename()の第2引数にsuffixを指定できる。
これを指定することで、指定した文字列を除いて末尾の文字列を取得できる。
参考
https://www.php.net/manual/ja/function.basename.php
そこで最初は以下のようにしていた
$path = '/users/30/admin';
$id = intval(basename($path, '/admin'));
var_dump($id);
その結果は以下のようになった。
int(0)
問題点
- basenameのsuffixは'/'で区切った最末尾の文字列('admin')から'/admin'がその末尾にあれば、除くことになるので、この場合'admin'がbasenameした結果になる
- intvalは失敗するとint(0)を返す
その結果、idが0のテストデータを作成していたため、テスト結果がエラーも出さず望んだ結果にならずに沼ってしまった。