PHP 7.4访问preg_match_all匹配结果报数组转字符串错误
错误原因
你触发「Array to string conversion」报错的核心原因是PHP多维数组访问语法写错了:PHP读取多维数组值时,各层级索引必须连续跟在变量名后,每级索引用独立方括号包裹,不能用逗号分隔索引。你写的$matches[0],[0],[1]中,PHP只会识别$matches[0](这本身是个数组)作为字符串拼接的内容,后面的,[0],[1]完全不属于数组访问语法,自然会因为把数组直接拼到字符串上报错。
数组结构说明
传入PREG_OFFSET_CAPTURE参数后,preg_match_all返回的$matches是三层结构,对应你的返回结果:
- 第一层索引
0:存放整个正则的全匹配结果集 - 第二层索引(0/1/2……序号):对应按顺序排列的单个匹配项
- 第三层固定规则:索引
0是匹配到的文本内容,索引1是该匹配项在原字符串中的字节偏移值
你要取的465、5400这类偏移值,对应访问路径为$matches[0][匹配项序号][1]。
正确代码示例
单个取值
取第一个匹配项的偏移值465:
echo '<BR>FROM $MATCHES: ' . $matches[0][0][1];
取第二个匹配项的偏移值5400:
echo '<BR>FROM $MATCHES: ' . $matches[0][1][1];
批量遍历所有偏移值
如果需要一次性拿到所有匹配到的PAGE对应的偏移值,直接遍历全匹配结果集即可:
foreach ($matches[0] as $item) { $pageOffset = $item[1]; echo '<BR>PAGE偏移值:' . $pageOffset; }
提示:PHP多维数组访问不支持逗号分隔索引的写法,所有层级的索引必须连续书写,中间不能插入逗号、其他运算符或无关字符。
内容的提问来源于stack exchange,提问作者Martha J Sayers
相关产品推荐
相关产品推荐

