如何循环爆炸的字符串列表?

时间:2017-05-28 21:30:33

标签: php

我在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)

0 个答案:

没有答案