正在删除包含其他数组元素的数组元素


Removing array elements that contain other array elements

我有一个从Geocoding API($glocs)获取的Google位置实体数组。有时,阵列中的一个元素在另一个元素中部分重复(例如"波斯尼亚和黑塞哥维那联邦,波斯尼亚和黑塞哥维那")。当我在前端通过内爆逗号分隔的数组来输出它们时,我希望输出看起来不那么机器人化。我写这段代码是为了避免重复名称:

$g = 1;
foreach($glocs as $gloc) {
    echo '<pre>$gloc ' . $gloc . ' vs $glocs[' . $g . '] ' . $glocs[$g]; // Just to see how it works
    if (stripos($gloc, $glocs[$g]) !== false OR stripos($glocs[$g], $gloc) !== false) {
        $glocs[$g - 1] = $glocs[$g];
    }
    echo '</pre>';
    $g++;
}

它应该检查数组中的每个元素是否都包含下一个元素,反之亦然。找到后,它用下一个元素替换当前元素(留下"波斯尼亚和黑塞哥维那,波斯尼亚和黑塞哥维那")。后续的array_unique应该完成该作业。

问题是"如果"部分不起作用。如果我将"false"替换为"0",则在所有情况下都会触发它。我也用其他方式处理过这个代码(例如===true而不是!===false或$gloc而不是$glocs[$g-1]),但它并没有按照我想要的方式工作。

请帮我解决我的问题。也许我还缺少另一种方法。谢谢


最终,我创建了一个冗余单词数组,如"Federation of"、"Arrondisement"(代表Paris),并开始针对该数组运行元素,消除包含冗余单词的元素。

方法中的一个小逻辑错误。您将仅用下一个覆盖类似的值
好的,现在你有两个完全相同的"赫塞哥维那"

$glocs =array("Federation of Bosnia and Herzegovina","Bosnia and Herzegovina",
              "Herzegovina","Germania");
...
$glocs[$g-1] = $glocs[$g];
...

输出:

array(4) {
  [0] =>
  string(22) "Bosnia and Herzegovina"
  [1] =>
  string(11) "Herzegovina"
  [2] =>
  string(11) "Herzegovina"
  [3] =>
  string(8) "Germania"
}

查看下一个解决方案(删除了双值)
决定哪种方法更好,但也必须改进
删除值"赫塞哥维那"
当然,这可能不是最终的解决方案
这没那么容易。对于这样的比较,还有其他重要的考虑因素


<?php
$glocs =array("Federation of Bosnia and Herzegovina","Bosnia and Herzegovina",
              "Herzegovina","Germania");
$g = 1;
foreach ($glocs as $gloc) {
  // Just to see how it works
  echo '<pre>$gloc '.$gloc.' vs $glocs['.$g.'] '.$glocs[$g];
  if (stripos($gloc, $glocs[$g]) !==false OR stripos($glocs[$g], $gloc ) !== false ) {
      unset($glocs[$g]);
     }
  echo '</pre>';
  $g++;
}
 var_dump($glocs);  
?>  

输出:


array(2) {
  [0] =>
  string(36) "Federation of Bosnia and Herzegovina"
  [3] =>
  string(8) "Germania"
}