LoginSignup
0
0

More than 3 years have passed since last update.

パスからidを取得したい

Posted at

背景

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のテストデータを作成していたため、テスト結果がエラーも出さず望んだ結果にならずに沼ってしまった。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0