首页 > 解决方案 > 如何从字符串中获取数据

问题描述

我对 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 "

任何帮助将非常感激。

标签: phparrays

解决方案


看起来数据是相当结构化的,即使是一团糟。

似乎有一个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
}

推荐阅读