0

我从一个客户端继承了一个项目,该项目使用 JSON 和 PHP 来显示来自在线房地产服务的房地产列表。服务提供的数据会加载,但与它们关联的属性和代理会混淆。有时会显示所有属性,但只有一个代理与之关联。其他时候数据会加载,但在显示一些属性后不会转换。过渡由 jQuery 循环插件控制。

我已经包含了下面的所有代码。非常感谢任何帮助。

谢谢你。

麦克风

<?php
function decode_json_string($json){
    $objects = array();

    $start_pos = strpos($json, '[');
    $end_pos = strpos($json, ']');

    $dataString = substr($json, ++$start_pos, ($end_pos - $start_pos));

    while(strpos($dataString, '{') !== FALSE){
        $start_pos = strpos($dataString, '{');
        $end_pos = strpos($dataString, '}');

        $objectString = substr($dataString, ++$start_pos, ($end_pos - $start_pos));

        $tempString = $objectString;

        $formattedString = "";

        while(strpos($tempString, ':') !== FALSE){
            $valueStart = strpos($tempString, ':');

            if($tempString[++$valueStart] != '"'){

                $substring1 = substr($tempString, 0, $valueStart);

                if(strpos($tempString, ',', $valueStart) !== FALSE){
                    $valueEnd = strpos($tempString, ',', $valueStart);

                    $substring2 = substr($tempString, $valueStart, ($valueEnd - $valueStart));
                }
                else{
                    $valueEnd = $valueStart + 1;
                    $substring2 = substr($tempString, $valueStart);
                }

                $formattedString .= $substring1 . '"' . $substring2 . '"';

                $tempString = substr($tempString, $valueEnd);
            }
            else{
                $valueEnd = strpos($tempString, '",') + 1;

                $formattedString .= substr($tempString, 0, $valueEnd);
                $tempString = substr($tempString, $valueEnd);
            }
        }

        $tempArray = explode('",', $formattedString);

        foreach($tempArray as $tempValue){
            $tempValueArray = explode( ":", $tempValue);

            $key = format_string($tempValueArray[0]);
            $value = format_string($tempValueArray[1]);

            $object[$key] = $value;
        }

        $objects[] = $object;

        $dataString = substr($dataString, ++$end_pos);
    }

    return $objects;
}

function format_string($string){
    $string = str_replace("'", "", $string);
    $string = str_replace('"', "", $string);

    return trim($string);
}

function get_agent_properties_json($agentID){
    global $BASE_URL;

    $date = time();
    $dataType = '3'; // Data Type = Properties

    $url = $BASE_URL . '/FeaturedDataHandler.c?r=' . $date . '&DataType=' . $dataType . '&CompanyID=' . $companyID . '&agentID=' . $agentID;

    // create a new cURL resource
    $ch = curl_init();

    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    // grab URL and pass it to the browser
    $response = curl_exec($ch);

    // close cURL resource, and free up system resources
    curl_close($ch);

    return $response;
}

function get_agent_properties($agentID){
    $agent_properties_json = get_agent_properties_json($agentID);
    $properties = decode_json_string($agent_properties_json);

    return $properties;
}

function print_property_details(&$property, &$agent){
    global $BASE_URL;

    if($property['ListingStatusCode'] != 'SOLD'){
        $address = $property['Address'];
        $shortaddr = substr($address, 0, -12);
        echo "<div class='propertySlide'>";
            echo "<div class='title'>";
                echo "<div class='box1'>";
                    echo "<span class='price'>". $property['Price'] ."</span>";
                    echo "<span class='address'>". $shortaddr ."</span>";
                echo "</div>";
                echo "<div class='box2'>";
                    echo "<span class='style'><strong>Style:</strong> ". $property['Style'] ."</span>";
                    echo "<span class='footage'><strong>Sq. Feet:</strong> ". $property['SqFootage'] ."</span>";
                    echo "<span class='beds'><strong>Beds:</strong> ". $property['Bedrooms'] ."</span>";
                    echo "<span class='baths'><strong>Baths:</strong> ". $property['Bathrooms'] ."</span>";
                    echo "<span class='year'><strong>Year Built:</strong> ". $property['YearBuilt'] ."</span>";
                echo "</div>";
            echo "</div>";
            echo "<div class='imagebox'><img class='listingImage' src='". $BASE_URL . $property['Image'] ."' /></div>";
            echo "<div class='agentbox'>";
                echo "<img class='agentImage' src='" . $BASE_URL . "/Users/pic" .  $agent['WTLUserID'] . ".jpg' />";
                echo "<span class='agent'><strong>Agent:</strong> ". $agent['DisplayName'] ."</span>";
            echo "</div>";
        echo "</div>";
    }
}

?>

$date = time();
$dataType = '4'; // Data Type = Agents
$companyID = '2119'; // Red Deer - Century 21 Advantage

$url = $BASE_URL . '/FeaturedDataHandler.c?r=' . $date . '&DataType=' . $dataType . '&CompanyID=' . $companyID;

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
$response = curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

$agents = decode_json_string($response);

foreach($agents as $agent){
    $properties = get_agent_properties($agent['WTLUserID']);

    foreach($properties as $property){
        print_property_details($property, $agent);
    }
}

<?php
$BASE_URL = 'http://www.century21.ca';

$date = time();
$dataType = '4'; // Data Type = Agents
$companyID = '2119'; // Red Deer - Century 21 Advantage

$url = $BASE_URL . '/FeaturedDataHandler.c?r=' . $date . '&DataType=' . $dataType . '&CompanyID=' . $companyID;

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
$response = curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

$agents = decode_json_string($response);

foreach($agents as $agent){
    $properties = get_agent_properties($agent['WTLUserID']);

    foreach($properties as $property){
        print_property_details($property, $agent);
    }
}
4

1 回答 1

0

在尝试在decode_json_string()这里调试函数之前,您应该尝试 PHP 的内置json_decode() http://php.net/manual/en/function.json-decode.php

如果你有一个旧版本的 PHP 缺少你可以在upgrade.phpjson_decode()中找到一个兼容的

于 2012-11-15T14:29:41.200 回答