2016-02-28 43 views
1

我通过REST调用获取Json数组。这是代码。在php表中使用Json数据

<?php include 'header.php' ; ?> 
<?php 
$base_url = "http://tic.sugarcrmdemo.com/rest/v10"; 
$username = "sereneintegration"; 
$password = "Sugar123!"; 

function call(
    $url, 
    $oauthtoken='', 
    $type='GET', 
    $arguments=array(), 
    $encodeData=true, 
    $returnHeaders=false 
) 
{ 
    $type = strtoupper($type); 

    if ($type == 'GET') 
    { 
     $url.= "?" . http_build_query($arguments); 
    } 
    $curl_request = curl_init($url); 

    if ($type == 'POST') 
    { 
     curl_setopt($curl_request, CURLOPT_POST, 1); 
    } 
    elseif ($type == 'PUT') 
    { 
     curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, "PUT"); 
    } 
    elseif ($type == 'DELETE') 
    { 
     curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, "DELETE"); 
    } 
    curl_setopt($curl_request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); 
    curl_setopt($curl_request, CURLOPT_HEADER, $returnHeaders); 
    curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_request, CURLOPT_FOLLOWLOCATION, 0); 
    if (!empty($oauthtoken)) 
    { 
     $token = array("oauth-token: {$oauthtoken}"); 
     curl_setopt($curl_request, CURLOPT_HTTPHEADER, $token); 
    } 
    if (!empty($arguments) && $type !== 'GET') 
    { 
     if ($encodeData) 
     { 
      $arguments = json_encode($arguments); 
     } 
     curl_setopt($curl_request, CURLOPT_POSTFIELDS, $arguments); 
    } 
    $result = curl_exec($curl_request); 
    if ($returnHeaders) 
    { 
     list($headers, $content) = explode("\r\n\r\n", $result ,2); 
     foreach (explode("\r\n",$headers) as $header) 
     { 
      header($header); 
     } 
     return trim($content); 
    } 
    curl_close($curl_request); 
    $response = json_decode($result); 

    return $response; 
} 
$url = $base_url . "/oauth2/token"; 
$oauth2_token_arguments = array(
    "grant_type" => "password", 
    "client_id" => "sugar", 
    "client_secret" => "", 
    "username" => $username, 
    "password" => $password, 
    "platform" => "base" 
); 

$oauth2_token_response = call($url, '', 'POST', $oauth2_token_arguments); 
$url = $base_url . "/SREV1_Property/48f10d2c-eca2-9163-77fb-56c7677240e2/link/srev1_property_srev1_unit"; 
    $unit_response = call($url, $oauth2_token_response->access_token, 'GET'); 

    $json = $unit_response; 

    $jd = json_decode(json_encode($json), 1); 
     $floors = array(); 
     foreach ($jd->records AS $key => $obj) { 
      $f = $obj->unit_floor; 
      $id = $obj->id; 
      $name = $obj->name; 
      $suite = $obj->suite; 
      $sf = $obj->sf; 
      $floors[$f][$suite]['name'] = $name; 
      $floors[$f][$suite]['id'] = $id; 
      $floors[$f][$suite]['sf'] = $sf; 
     } 
     //sort floors in desc order 
     krsort($floors); 
     foreach($floors as $id => $floor){ 
      ksort($floors[$id]); 
     } 
     print '<table class="data-table" >'; 
     foreach($floors as $floor => $suites){ 
      $sqf = 0; 
      print '<tr>'; 
       print '<td>FLOOR: '.$floor.'</td>'; 
       foreach($suites AS $suite => $value){ 
        $sqf += $value['sf']; 
        print'<td>Suite:'.$suite.'<br>SF:'.$value['sf'].'</td>'; 
       } 
       print '<td>'.$sqf.'</td>'; 
      print '</tr>'; 
     } 
     print '</table>'; 
    ?> 

当我执行此我得到这样的错误“的foreach为无效的论点提供()”,“试图获得非对象”等的财产,。

+1

请删除不必要的代码。我正在计算4个foreach循环。哪个是抛出错误? –

回答

1

删除json_decode()因为你已经得到适当的JSON stdClass的对象,即只是使它:

...... 
$unit_response = call($url, $oauth2_token_response->access_token, 'GET'); 
$jd = $unit_response; 
$floors = array(); 
foreach ($jd->records AS $key => $obj) { 
...... 
+0

@mitksoft:非常感谢你,男士。有效,。我会给你一个很好的享受。 –