###実現したいこと
app le pie
という文字列があります。
関数 fix_tag_name( $tag_name, $to )
を介して変換したいです。
引数$to
が
camelize
なら AppLePie
へ変換する
kebab
なら app-le-pie
へ変換する
という変換です。
###発生している問題
その変換をarray_map
で行いたいのですが、$to
の部分をどう渡せばいいのかわかりません。
###該当のソースコード
以下が関数になります。
$to
にはcamelize
を渡しているので、AppLePie
にしたいのですが、AppLe Pie
になってしまいます。
php
1$tag_names = [ ' app le pie' ]; 2var_export( array_map ( function($tag_name){ return fix_tag_name($tag_name,'camelize'); }, $tag_names ) ); 3 4function fix_tag_name( $tag_name, $to = 'kebab' ){ 5 $max_legth = 100; 6 if( $to === 'kebab' ){ 7 $cnved = kebab( $tag_name ); 8 }elseif( $to === 'camelize' ){ 9 $cnved = camelize( $tag_name ); 10 } 11 return mb_substr($cnved, 0, $max_legth, 'utf8'); 12} 13 14function kebab($str){ 15 return preg_replace( '[\s]', '-', trim($str) ); 16} 17 18function camelize( $str ) { 19 // $del があれば削除して、$before の直前を大文字にする 20 $del = '[\s]'; 21 $before = ' -_&'; 22 return preg_replace($del, '', ucwords($str, $before)); 23}
###試したこと
単純なコードで以下試すとうまくいきました。上記は何がいけませんでしょうか?
php
1$values = ['a','b']; 2var_export( array_map ( function($v){ return 'x_' . $v; }, $values ) );
###バージョン
PHP:7.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/04 23:24