VosCast SHOUTcast库下array_unique无法去重HOSTNAME的解决方法
监听器列表按HOSTNAME去重实现方案
原有代码失效原因
array_unique仅支持对一维数组的标量值做重复校验,传入的$vc_shoutcast->LISTENERS是嵌套结构的多维数组,每个元素为包含多字段的关联数组,无法被函数直接识别比对,因此去重逻辑完全不生效,所有原始条目都会被完整输出。
可直接复用的去重代码
$recordedHosts = []; $filteredListeners = array_filter( $vc_shoutcast->LISTENERS, function($item) use (&$recordedHosts) { $host = $item['HOSTNAME']; // 严格比对HOSTNAME值,已存在的条目直接过滤 if (in_array($host, $recordedHosts, true)) { return false; } $recordedHosts[] = $host; return true; } );
逻辑说明
- 默认保留同一HOSTNAME下最先出现的连接条目,如需调整保留规则(比如保留连接时长最长、UID最新的条目),可在回调内增加对应字段的比对逻辑
- 比对过程开启严格模式,避免弱类型隐式转换导致的HOSTNAME误判
- 处理后的数组会保留原数组的索引结构,可直接替代原始监听器列表做页面渲染
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

