Спасибо за критику!
Тот же "более сложный случай", но элегантнее:
$unauthed_list=array(666,777);
$unauthed = '0' . (($s=@join(',',$unauthed_list)) ? ','.$s : '');
if(!$is_auth[$forum_id]['auth_read'] && !in_list($forum_id,$unauthed_list))
А поподробнее про функцию in_list расскажите нашим читателям?
Может лучше in_array?
Теперь об "элегантности":
$unauthed = '0,666,777';
if(!$is_auth[$forum_id]['auth_read'] and !in_array($forum_id,explode(",",$unauthed)))
Работает минимум в 4 раза быстрее
P.S. В своей заметке я давал просто мысль где копать, о чём честно и написал в конце.
Добавлено спустя 4 часа 49 минут 19 секунд:
Самое во всем этом смешное, что собственно логика то сравнения неправильная изначально. Вот на что надо было внимание обращать.
Нет, господа, по ночам надо спать, а не программировать:
Вместо if(!$is_auth[$forum_id]['auth_read'] && $forum_id!=666)
Следовало if(!$is_auth[$forum_id]['auth_read'] or $forum_id==666)
соответственно:
if(!$is_auth[$forum_id]['auth_read'] || $forum_id==666 || $forum_id==777)
Ну, или в продвинутой версии:
if(!$is_auth[$forum_id]['auth_read'] or in_array($forum_id,explode(",",$unauthed)))