Perlを知らないからe修飾子というのがよぐわがんにゃい。

うーん。
クライアントが使っている
WordPressのプラグインの修正をしたのだけども単純にコピペで修正しただけだから時間をとってなんでこうなるのかを勉強しておこうと思うためのメモ。

//Warningがでていた
preg_replace('~&#x0*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $faq_tag);

//とりあえずこれで対応した。
preg_replace_callback('~&#x0*([0-9a-f]+);~i', function($m){return $m[1].'('.strlen($m[1]).')';}, $faq_tag);

fullcalendarのイベントの日付の問題。

//終日設定がうまく起動しないので時間をつい1日分の時間を自動で追加 (それに伴い日付の表示をCSSで削除
$start_date = $event_schedule['start_date']."T00:00:00+09:00";
$end_date = $event_schedule['end_date']."T23:59:59+09:00";

WordPressでAjaxをつかってfullcalendarにイベントを掲載しようとしていたときに
ドツボにはまりそうだったのでメモ書き。
現在でもスマートな解決にはなってない。

phpでjonsを返しているが
fullcalendarのallDay(終日設定)を入れても最終日の最後までイベントが開催されていることになっていない。
原因としてはphp側でデータを引っ張って来ている時に足りない部分をfullcalendarが自動変換することが原因のようなことらしい?

現状としてはソースを掲載しているように時間を付け足し
画面上に表示される時刻の表記をCSSで消しているという美しくない実装で終わっている。
う〜〜〜ん。
手書きで書いたjson形式のデータだと問題ないから 手書きでも問題あったわ。
もしかしたらphp側のjson_encodeの問題なのかもしれない。
もうちょっとこれは見てみようか。

count()の挙動。

php7.2より

count(null)の場合はWarningを出すようになっていた。

単純にセットされているだけの判定に使っている場合は
isset()を使うように。

nullになるかもしれないけどcountも取りたいんだよ!
という場合はちゃんと

if (is_array($panda)) count($panda);

書く必要がある。

配列の値をつかってキーを取得

<?php
$_star = array(
	'★★★★★' =>'star5',
	'★★★★☆' =>'star4',
	'★★★☆☆' =>'star3',
	'★★☆☆☆' =>'star2',
	'★☆☆☆☆' =>'star1',
	'☆☆☆☆☆' =>'star0',
);
 //取得した値を使い配列からキーを取得
while ($star_val = current($_star)) {
	if ($star_val == 'star3') echo key($_star);
	next($_star);
}
?>
//結果
★★★☆☆

array_key_existsが良かった!

配列のキーのマッチングを最初はforeachで回してたりしていたけども
こんなん絶対関数あるやろ!!!
と思って探してみたらさっくり見つかった。

array_key_exists();

$page_name = "くま";
$site_descriotions = array( "くま"=>"4","ぱんだ"=>"5","うさぎ"=>"7", );
if(array_key_exists($page_name,$site_descriotions)){
 echo $page_name'は'.$site_descriotions[$page_name].'匹';
}

foreachで回してbreakさせたりするよりだいぶスマートになった。