php - 如何从字符串中获取数据
问题描述
我对 API REST 做了一个 GET 请求,我得到了一些数据(base64 编码)。
现在我需要从结果中获取一些特定的值,但我不知道如何。
这就是我到目前为止所拥有的
<?php
//BUSCAR DOCUMENTOS
$service_url = 'http://192.168.4.77/api/Core.svc/core/PaginatedSearch/P/E/KFRpcG9EVEU6MzMgQU5EIEZjaEVtaXM6WzIwMTktMDYtMjEgVE8gMjAxOS0wNy0zMF0p/0/10';
$ch = curl_init($service_url);
curl_setopt($ch, CURLOPT_URL, $service_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'AuthKey: top-secret',
'Content-Type: application/json',
'Accept: application/json',
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$response = curl_exec($ch);
$err = curl_error($ch);
if ($err) {
echo "cURL Error #:" . $err;
} else {
$datos = json_decode($response,true);
foreach ($datos as $k => $v) {
$Result = $datos['Result'];
$Description = $datos['Description'];
$SearchTime = $datos['SearchTime'];
$TotalDocuments = $datos['TotalDocuments'];
$Data = $datos['Data'];
}
$test = base64_decode($Data);
var_dump($test);
}
curl_close($ch);
?>
这就是我得到的,需要获取值(示例:33 2284 21-06-2019 0:00:00)
string(3340) " <_DocID>37753825 <_Group>1 No 33 2284 21-06-2019 0:00:00 2 77606550-1 SOCIEDAD DE TURISMO RIO SERRANO S.A. Rio Serrano Hotel + 79800310-0 dte@comapa.cl TURISMO COMAPA LTDA dte@comapa.cl 314162 50160 264002 0 Outdoors 0 Punta Arenas Ultima Esperanza PUNTA ARENAS PUNTA ARENAS 521111 Correcta V?lida Si Si Espera Acuse Recibo Si 21-06-2019 9:24:31 Enviado 37753825 77606550-1\sent\33\2019\06\21\T033N000000000002284S776065501R798003100D20190621.xml Indefinido No No 21-06-2019 9:30:04 Indefinido 21-07-2019 16:55:01 <_DocID>37754716 <_Group>1 No 33 2285 21-06-2019 0:00:00 2 77606550-1 SOCIEDAD DE TURISMO RIO SERRANO S.A. Rio Serrano Hotel + 79800310-0 dte@comapa.cl TURISMO COMAPA LTDA dte@comapa.cl 314162 50160 264002 0 Outdoors 0 Punta Arenas Ultima Esperanza PUNTA ARENAS PUNTA ARENAS 521111 Correcta V?lida Si Si Espera Acuse Recibo Si 21-06-2019 9:47:31 Enviado 37754716 77606550-1\sent\33\2019\06\21\T033N000000000002285S776065501R798003100D20190621.xml Indefinido No No 21-06-2019 9:50:22 Indefinido 21-07-2019 16:55:13 "
任何帮助将非常感激。
解决方案
看起来数据是相当结构化的,即使是一团糟。
似乎有一个key denotation <_DocID>
,key,一个value denotation <_Group>
,value,然后继续重复。使用它,我们至少可以将其分解为更合理的关联数组。
$structured_response = [];
$keys = explode('<_DocID>', $response); //First we'll look for the keys
foreach ($keys as $key) {
if ($key == '') continue;
$data = explode('<_Group>', $key); //Then we'll look for what's around on either side of the value denotation
$key = $data[0]; //Before the key-ending separator will be the key
$value = $data[1]; //After the separator will be the data
$structured_response[$key] = $value; //Now save the data to the array
}
推荐阅读
- virtualenv - 切换到虚拟环境
- assembly - 关于 ax,al 寄存器 x86 64bits asm 的问题
- javascript - Webpack - 构建多个条目,但只包含一次 polyfills 和模块包装器
- r - 如何在R中一次重命名多个列
- rxjs - Angular Rxjs:让 concat 等待很长时间
- .htaccess - htaccess 重写 URL website.com/?collections%5B%5D=Pandemics 到 website.com/Pandemics
- flask-wtforms - 具有动态选择的 WTForms Flask SelectField 中的活动按钮
- python - 使用 keras.utils.plot_model 构建的 Tensorflow 模型图不显示串联
- asp.net-core - 使用 Windows 身份验证以其他用户身份登录
- python - AttributeError:'tuple'对象在opencv2中没有属性'copy'