You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:48:38