Rightmove BLM文件转数组后如何用通配符遍历MEDIA_IMAGE_前缀元素
Rightmove BLM数组图片字段批量遍历方案
通配符匹配可行性
原生PHP数组不直接支持MEDIA_IMAGE_*格式的通配符键查询,但可以通过简单的遍历逻辑实现等价效果,性能和可维护性都能满足需求。
最优遍历方案
方案1:正则匹配键名(通用性最强,适配任意序号数量)
直接遍历数组所有键,通过正则匹配筛选MEDIA_IMAGE_开头且后面跟两位数字的键,同时可以关联对应的MEDIA_IMAGE_TEXT_*字段:
$blmArray = /* 你转换得到的BLM数组 */; $images = []; foreach ($blmArray as $key => $value) { // 匹配MEDIA_IMAGE_xx格式的键,跳过TEXT字段 if (preg_match('/^MEDIA_IMAGE_(\d{2})$/', $key, $matches)) { $index = $matches[1]; $images[] = [ 'file' => $value, 'text' => $blmArray["MEDIA_IMAGE_TEXT_{$index}"] ?? '' ]; } }
这种方案不需要提前知道图片的最大序号,哪怕BLM文件里的序号不连续也能正常识别。
方案2:循环递增序号(性能更高,适配Rightmove规范)
Rightmove的BLM规范里图片序号是从00开始连续递增的,最多支持99张,所以可以直接循环判断键是否存在,不需要遍历整个数组:
$blmArray = /* 你转换得到的BLM数组 */; $images = []; for ($i = 0; $i < 100; $i++) { $index = str_pad($i, 2, '0', STR_PAD_LEFT); $imageKey = "MEDIA_IMAGE_{$index}"; if (!isset($blmArray[$imageKey]) || empty($blmArray[$imageKey])) { // 遇到不存在的键直接终止循环,因为序号是连续的 break; } $images[] = [ 'file' => $blmArray[$imageKey], 'text' => $blmArray["MEDIA_IMAGE_TEXT_{$index}"] ?? '' ]; }
这种方案性能更好,因为不需要遍历整个BLM数组的所有字段,只要找到连续的图片字段就停止。
方案选择建议
- 如果你的BLM解析逻辑严格遵循Rightmove官方规范,优先选方案2,性能更高
- 如果不确定解析后的数组会不会出现序号不连续的情况,选方案1,兼容性更强
内容的提问来源于stack exchange,提问作者James Deadman
相关产品推荐
相关产品推荐

