如何解析返回的php数据

时间:2009-11-20 23:50:24

标签: php arrays

我正在访问外部PHP服务器源(不是真正的链接):

$raw = file_get_contents('http://www.domain.com/getResults.php');

在以下上下文中返回数据:

<pre>Array   
(   
    [RequestResult] => Array   
        (   
            [Response] => Success   
            [Value] => 100
            [Name] => Abracadabra
        )   
)   
</pre>

但是我无法弄清楚如何处理这个响应...我希望能够获取[Value]值和[Name]值,但我的PHP技能非常弱...另外如果有是一种用JavaScript处理这个问题的方法(我用JavaScript做得更好)然后我可以考虑将我的例程构建为客户端函数...

有人可以建议一种处理此Feed响应的方法吗?

4 个答案:

答案 0 :(得分:3)

这样的事情

function responseToArray($raw)
{
   $result = array();

  foreach(explode("\n", $raw) as $line)
  {
    $line = trim($line);
    if(stripos($line, " => ") === false)
    {
      continue;
    }
    $toks = explode(' => ', $line);
    $k = str_replace(array('[',']'), "", $toks[0]);
    $result[$k] = $toks[1]; 


  }
  return $result;
}

答案 1 :(得分:0)

另一方的脚本可以返回数组的JSON字符串,您的客户端脚本可以轻松读取它。请参阅json_encode()json_decode()http://www.php.net/json-encodehttp://www.php.net/json-decode

您在“服务器”脚本上执行的操作实际上是var_dump变量。 var_dump实际上更多地用于调试,以查看变量实际包含的内容,而不是数据传输。

在服务器脚本上:

<?php

header("Content-Type: application/json");
$arr_to_output = array();

// ..  fill up array

echo json_encode($arr_to_output);

?>

脚本的输出类似于['element1', 'element2']

在客户端脚本上:

<?php

$raw = file_get_contents('http://example.com/getData.php');

$arr = json_decode($raw, true); // true to make sure it returns array. else it will return object.

?>

替代

如果以这种方式修复数据的结构,那么你可以尝试使用正则表达式来修复它。

在客户端脚本上:

<?php

$raw = file_get_contents('http://example.com/getData.php');

$arr = array('RequestResult'=>array());
preg_match('`\[Response\]\s\=\>\s([^\r\n]+)`is',$raw,$m);
$arr['RequestResult']['Response'] = $m[1];
preg_match('`\[Value\]\s\=\>\s([^\r\n]+)`is',$raw,$m);
$arr['RequestResult']['Value'] = $m[1];
preg_match('`\[Name\]\s\=\>\s([^\r\n]+)`is',$raw,$m);
$arr['RequestResult']['Name'] = $m[1];

// $arr is populated as the same structure as the one in the output.

?>

答案 2 :(得分:0)

$ raw [RequestResult] [Value]不起作用?我认为数据只是一个嵌套的哈希表

答案 3 :(得分:0)

两种可能的解决方案:

解决方案#1在源处更改一行:

看起来getResults.php正在执行print_r。如果print_r可以更改为var_export,您将获得一个PHP可解析的字符串,以便提供给eval

$raw = file_get_contents('http://www.domain.com/getResults.php');
$a= eval($raw);
echo($raw['RequestResult']['Value']);

警告,从外部来源评估原始数据(然后echo()将其输出)不是很安全

解决方案#2解析正则表达式:

<?php

$s= <<<EOS
<pre>Array   
(   
    [RequestResult] => Array   
        (   
            [Response] => Success   
            [Value] => 100
            [Name] => Abracadabra
        )   
)   
</pre>
EOS;

if (preg_match_all('/\[(\w+)\]\s+=>\s+(.+)/', $s, $m)) {
 print_r(array_combine($m[1], $m[2]));
}

?>

现在$ a将包含:$a['Value']==100$a['Name']=='Abracadabra'等。