如何从PHP默认Solr扩展获取并遍历SolrObject结果?
解析并遍历PHP默认Solr扩展返回的SolrObject
不用第三方库也能轻松处理SolrObject,下面两种方法直接能用:
方法一:转成普通数组遍历
SolrObject可以转成普通数组,之后就和遍历普通数组没区别了,两种转换方式任选:
强制类型转换
适合层级不深的结构,直接用(array)转换:
$client = new SolrClient($solroptions); $query = new SolrQuery(); $query->setQuery('row:'.term("term")); $query->addSortField("createdon",0); $query->setStart(0); $query->setRows(10); $query_response = $client->query($query); $response = $query_response->getResponse(); // 转成数组 $responseArr = (array) $response; // 遍历响应头 $headerArr = (array) $responseArr['responseHeader']; foreach ($headerArr as $key => $val) { echo "$key: $val\n"; } // 遍历查询结果(核心数据在response->docs里) $docsArr = (array) $responseArr['response']['docs']; foreach ($docsArr as $doc) { $docArr = (array) $doc; foreach ($docArr as $field => $fieldVal) { echo "文档字段 $field: $fieldVal\n"; } }
JSON序列化转数组
适合嵌套较深的结构,一次性转成多维数组:
// 转成数组 $responseArr = json_decode(json_encode($response), true); // 遍历响应头 foreach ($responseArr['responseHeader'] as $key => $val) { echo "$key: $val\n"; } // 遍历结果文档 foreach ($responseArr['response']['docs'] as $doc) { foreach ($doc as $field => $fieldVal) { echo "文档字段 $field: $fieldVal\n"; } }
方法二:直接遍历SolrObject
SolrObject本身支持直接用对象属性访问,也能直接foreach遍历:
$client = new SolrClient($solroptions); $query = new SolrQuery(); $query->setQuery('row:'.term("term")); $query->addSortField("createdon",0); $query->setStart(0); $query->setRows(10); $query_response = $client->query($query); $response = $query_response->getResponse(); // 遍历响应头 foreach ($response->responseHeader as $key => $val) { // 如果子元素还是SolrObject,继续遍历 if ($val instanceof SolrObject) { foreach ($val as $subKey => $subVal) { echo "responseHeader.$key.$subKey: $subVal\n"; } } else { echo "responseHeader.$key: $val\n"; } } // 遍历结果文档 foreach ($response->response->docs as $doc) { foreach ($doc as $field => $fieldVal) { echo "文档字段 $field: $fieldVal\n"; } }
注意事项
- 核心查询结果一般在
response->docs(或对应数组的response['docs'])里,根据自己Solr的返回结构调整字段名 - 如果Solr字段是多值类型,返回的对应值会是数组,直接遍历数组即可
内容的提问来源于stack exchange,提问作者solrisannoying
相关产品推荐
相关产品推荐

