簡體   English   中英

搜索數組以返回子值的鍵的最佳方法是什么

[英]What is the best way to search through an array to return the key of a sub value

我試圖過濾數組(派生自json對象),以便根據值返回數組鍵。 我不確定數組搜索$key = array_search($value, $array); 是執行此操作的最佳方法(我無法使其工作),我認為必須有更好的方法。

到目前為止,我已經知道了,但是沒有用。 感謝您的幫助!

    public function getBedroomData(array $data,$num_beds = null,$type) {

    $data = (array) $data;

    if($num_beds > 0) {
        $searchstring = "avg_".$num_beds."bed_property_".$type."_monthly";
        } else {
        $searchstring = "avg_property_".$type."_monthly";
        }

        $avg_string = array_search($data, $searchstring);
    return $avg_string;             
    }

該數組包含從nestoria api獲取的平均房地產價格,如下所示: http ://api.nestoria.co.uk/api?country=uk&pretty=1&action=metadata&place_name=Clapham&price_type=fixed&encoding=json

這將返回一個長json對象。 我的問題是數據不一致-我正在尋找執行以下操作的最快方法(運行時):

            $data['response']['metadata']['0'] //= data to return, [0] unknown
            $data['response']['metadata']['0']['metadata_name'] = "avg_1bed_property_rent_monthly" //= string I know!
            $data['response']['metadata']['1'] //= data to return, [1] unknown
            $data['response']['metadata']['1']['metadata_name'] = "avg_1bed_property_buy_monthly" //= string I know!
            $data['response']['metadata']['2'] = //= data to return, [2] unknown
            $data['response']['metadata']['2']['metadata_name'] = "avg_2bed_property_buy_monthly" //= string I know!
            .....
            .....
            .....
            $data['response']['metadata']['10'] = avg_property_rent_monthly
            $data['response']['metadata']['11'] = avg_property_buy_monthly
            $data['response']['metadata'][most_recent_month] = the month reference for getting the data from each metadata list.. 

據我所知,無法按卧室數過濾初始搜索查詢。 因此,如果選擇了卧室,我只是對輸出進行數組切片以獲取所需的信息,但是由於數據不一致,因此這經常會失敗。

為了在nestoria中搜索特定的json響應,可以使用一個簡單的foreach循環。 首先,當然要調用所需的json數據。 然后,提取整個數據,如果非常簡單,則下一步。 考慮以下示例:

$url = 'http://api.nestoria.co.uk/api?country=uk&pretty=1&action=metadata&place_name=Clapham&price_type=fixed&encoding=json';
$contents = file_get_contents($url);
$data = json_decode($contents, true);
$metadata = $data['response']['metadata'];

// dummy values
$num_beds = 1; // null or 0 or greater than 0
$type = 'buy'; // buy or rent

function getBedroomData($metadata, $num_beds = null, $type) {
    $data = array();

    $searchstring = (!$num_beds) ? "avg_property_".$type."_monthly" : "avg_".$num_beds."bed_property_".$type."_monthly";
    $data['metadata_name'] = $searchstring;
    $data['data'] = null;

    foreach($metadata as $key => $value) {
        if($value['metadata_name'] == $searchstring) {
            $raw_data = $value['data']; // main data

            // average price and data points
            $avg_price = 0;
            $data_points = 0;
            foreach($raw_data as $index => $element) {
                $avg_price += $element['avg_price'];
                $data_points += $element['datapoints'];
            }
            $data_count = count($raw_data);
            $price_average = $avg_price / $data_count;
            $data_points_average = $data_points / $data_count;

            $data['data'][] = array(
                'average_price' => $price_average,
                'average_datapoints' => $data_points_average,
                'data' => $raw_data,
            );
        }
    }

    return $data;
}

$final = getBedroomData($metadata, $num_beds, $type);

print_r($final);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM