我正在访问外部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响应的方法吗?
答案 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-encode和http://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'
等。