我正在尝试过滤一个数组(从json对象派生),以便根据该值返回数组键。我不确定数组搜索{{1}}是否是最好的方法(我无法使其工作),我认为必须有更好的方法。
到目前为止,我已经有了这个,但它没有用。感谢任何帮助!
$key = array_search($value, $array);
该数组包含从nestoria api取得的平均房产价格如下: http://api.nestoria.co.uk/api?country=uk&pretty=1&action=metadata&place_name=Clapham&price_type=fixed&encoding=json
这将返回一个长json对象。我的问题是数据不一致 - 我正在寻找最快(运行时)的方式来执行以下操作:
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;
}
根据我的计算结果,无法按卧室数量过滤初始搜索查询。所以,我只是对输出进行数组切片以获取我选择卧室时所需的信息,但由于数据不一致,这往往会失败。
答案 0 :(得分:0)
要在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);