load_namefile(&$a, $b)は、$aをそのまま返せばいい。参照渡しで値を返すと可読性が激しく低下する。返り値$iはcount($a)に等しいはずだ。

変数名が手抜きすぎる。$aとか$bとか$cとか$vとかなんの拷問だ。
append_namefile($name, $last_talk_time, $room_number)にするだけで10,000倍読みやすくなる。foreach()とかで使う一時変数も同じ。
「保守性の高いコード」はアーキテクチャが生むんじゃなくて、変数名やインデントなどのミクロな部分が生むんだ。神は細部に宿る。

$_POST["state"]での処理の振り分けは、明らかにifではなくcaseにすべき箇所。

名簿ファイルのロック処理が半端。flock()を信用するならbegin_lock()は不要。
信用しないならflock()が正常に動く事を前提としているbegin_lock()も同じく信用ならない事になるので意味がない。
信用しないならmkdirロックを使うべき。SQLiteかなんかを使ったほうが手っ取り早いが。

flock($fp, LOCK_UN)してはいけない。「鍵を開けた後、ファイルを閉める」までの間にファイルが破壊される。
単に閉じれば安全な形でロックが開放される。