我在input
字段中有一个国家/地区名称列表,如:
西班牙意大利法国德国
首先,我将所有字符串设为小写,以免与geoJson数据中的国家/地区名称不匹配。然后我将字符串与geoJson中的专有名称进行比较,如果匹配,我将其推入数组中。
$json = file_get_contents("../world_ita.json");
$data = json_decode($json, true);
$states = array();
$item = null;
$stateList = strtolower( usp_get_meta(false, 'usp-custom-3'));
$stateList = htmlspecialchars_decode ( $stateList);
$stateList = preg_replace("/\w[\w']*/e", "ucwords('\\0')", $stateList);
$stateList = explode(' ',$stateList);
foreach($data["features"] as $feature) {
$id = $feature["id"];
$name = $feature["properties"]["name"];
$feature["properties"]["density"] = 0;
foreach($stateList as $state) {
if ($name == $state) {
if (!in_array($name, $states)) {
$item = $feature;
array_push($states, $name);
}
} else { ?>
statesData.features.forEach(function(state) {
if ("<?php echo $id;?>" == state.id) {
state.properties.density += 10;
}
});
<?php }
}
}
if (!is_null($item)) : ?>
statesData.features.push(<?php echo json_encode($item); ?>);
<?php endif; ?>
以上不起作用,它打破了它。我想首先爆炸字符串,然后循环它们并运行代码的其他部分,我不知道我在那里做错了什么。
更新
以上代码的作用是为geoJson
中的每个单个对象重复以下操作statesData.features.forEach(function(state) {
并且它不打印坐标,因为我在它的末尾运行以下内容:
if (!is_null($item)) : ?>
statesData.features.push(<?php echo json_encode($item); ?>);
<?php endif;
它只打印一个国家坐标,但名称与geoJson相同,因此它应打印所有匹配的。
更新2
我正在尝试的代码就是这样(与新版本的代码不同):
var statesData = {
"type": "FeatureCollection",
"features": []
};
<?php
$json = file_get_contents("http://www.jikupin.com/world_ita.json");
$data = json_decode($json, true);
$states = array();
$classesForCountries = [];
$item = null;
$stateList = strtolower( usp_get_meta(false, 'usp-custom-3'));
$stateList = htmlspecialchars_decode ( $stateList);
$stateList = preg_replace("/\w[\w']*/e", "ucwords('\\0')", $stateList);
$stateList = explode(' ',$stateList);
foreach($data["features"] as $feature) {
$name = $feature["properties"]["name"];
foreach($stateList as $state) {
if ($name == $state) {
if (!in_array($name, $states)) {
$item = $feature;
array_push($states, $name);
}
}
}
}
if (!is_null($item)) : ?>
statesData.features.push(<?php echo json_encode($item); ?>);
<?php
endif;
?>
上面没有打印任何坐标,如果我删除了explode
和我为它做的循环,这意味着如果我为一个国家运行它,它就可以了。当我运行爆炸和循环时,我尝试var_dumb($states)
,我得到
value (0)