2014-05-03 116 views
0

具体数值我有这段代码:PHP读取从API响应

<?php 
# 
# Sample Socket I/O to CGMiner API 
# 
function getsock($addr, $port) 
{ 
$socket = null; 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if ($socket === false || $socket === null) 
{ 
    $error = socket_strerror(socket_last_error()); 
    $msg = "socket create(TCP) failed"; 
    echo "ERR: $msg '$error'\n"; 
    return null; 
} 

$res = socket_connect($socket, $addr, $port); 
if ($res === false) 
{ 
    $error = socket_strerror(socket_last_error()); 
    $msg = "socket connect($addr,$port) failed"; 
    echo "ERR: $msg '$error'\n"; 
    socket_close($socket); 
    return null; 
} 
return $socket; 
} 
# 
# Slow ... 
function readsockline($socket) 
{ 
$line = ''; 
while (true) 
{ 
    $byte = socket_read($socket, 1); 
    if ($byte === false || $byte === '') 
     break; 
    if ($byte === "\0") 
     break; 
    $line .= $byte; 
} 
return $line; 
} 
# 
function request($cmd) 
{ 
$socket = getsock('127.0.0.1', 4028); 
if ($socket != null) 
{ 
    socket_write($socket, $cmd, strlen($cmd)); 
    $line = readsockline($socket); 
    socket_close($socket); 

    if (strlen($line) == 0) 
    { 
     echo "WARN: '$cmd' returned nothing\n"; 
     return $line; 
    } 

    print "$cmd returned '$line'\n"; 

    if (substr($line,0,1) == '{') 
     return json_decode($line, true); 

    $data = array(); 

    $objs = explode('|', $line); 
    foreach ($objs as $obj) 
    { 
     if (strlen($obj) > 0) 
     { 
      $items = explode(',', $obj); 
      $item = $items[0]; 
      $id = explode('=', $items[0], 2); 
      if (count($id) == 1 or !ctype_digit($id[1])) 
       $name = $id[0]; 
      else 
       $name = $id[0].$id[1]; 

      if (strlen($name) == 0) 
       $name = 'null'; 

      if (isset($data[$name])) 
      { 
       $num = 1; 
       while (isset($data[$name.$num])) 
        $num++; 
       $name .= $num; 
      } 

      $counter = 0; 
      foreach ($items as $item) 
      { 
       $id = explode('=', $item, 2); 
       if (count($id) == 2) 
        $data[$name][$id[0]] = $id[1]; 
       else 
        $data[$name][$counter] = $id[0]; 

       $counter++; 
      } 
     } 
    } 

    return $data; 
} 

return null; 
} 
# 
if (isset($argv) and count($argv) > 1) 
$r = request($argv[1]); 
else 
$r = request('summary'); 
# 
echo print_r($r, true)."\n"; 
# 
?> 

它输出这样的信息:

summary returned 'STATUS=S,When=1399108671,Code=11,Msg=Summary,Description=cgminer 4.3.0hf|SUMMARY,Elapsed=531,MHS av=453052.33,MHS 5s=537024.44,MHS 1m=458922.01,MHS 5m=375184.88,MHS 15m=201623.38,Found Blocks=0,Getworks=16,Accepted=518,Rejected=12,Hardware Errors=271,Utility=58.54,Discarded=276,Stale=0,Get Failures=0,Local Work=65806,Remote Failures=0,Network Blocks=1,Total MH=240524241.0000,Work Utility=5589.33,Difficulty Accepted=49008.00000000,Difficulty Rejected=448.00000000,Difficulty Stale=0.00000000,Best Share=93465,Device Hardware%=0.5450,Device Rejected%=0.9059,Pool Rejected%=0.9059,Pool Stale%=0.0000,Last getwork=1399108671|' 
Array 
(
    [STATUS] => Array 
     (
      [STATUS] => S 
      [When] => 1399108671 
      [Code] => 11 
      [Msg] => Summary 
      [Description] => cgminer 4.3.0 
     ) 

    [SUMMARY] => Array 
     (
      [0] => SUMMARY 
      [Elapsed] => 531 
      [MHS av] => 453052.33 
      [MHS 5s] => 537024.44 
      [MHS 1m] => 458922.01 
      [MHS 5m] => 375184.88 
      [MHS 15m] => 201623.38 
      [Found Blocks] => 0 
      [Getworks] => 16 
      [Accepted] => 518 
      [Rejected] => 12 
      [Hardware Errors] => 271 
      [Utility] => 58.54 
      [Discarded] => 276 
      [Stale] => 0 
      [Get Failures] => 0 
      [Local Work] => 65806 
      [Remote Failures] => 0 
      [Network Blocks] => 1 
      [Total MH] => 240524241.0000 
      [Work Utility] => 5589.33 
      [Difficulty Accepted] => 49008.00000000 
      [Difficulty Rejected] => 448.00000000 
      [Difficulty Stale] => 0.00000000 
      [Best Share] => 93465 
      [Device Hardware%] => 0.5450 
      [Device Rejected%] => 0.9059 
      [Pool Rejected%] => 0.9059 
      [Pool Stale%] => 0.0000 
      [Last getwork] => 1399108671 
     ) 

) 

我怎样才能得到一个特定的值?例如,我怎么能只输出“[MHS15米]”

回答

2

如果$res是包含数组,你可以得到的值作为

echo $res['SUMMARY']['MHS 15m']; 
+0

变量只好用的,而不是“$水库“$ R” ”。谢谢!我会接受你的回答。 – Andrei