我有一系列来自Geocoding API($ glocs)的Google位置实体。有时阵列中的一个元素在另一个元素中部分重复(例如,#34;波斯尼亚和黑塞哥维那联邦,波斯尼亚和黑塞哥维那")。当我通过用逗号分隔数组来输出它们时,我希望输出看起来更少机器人。我写了这段代码,试图避免重复名称:
$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++;
}
它应该检查数组的每个元素是否包含下一个元素,反之亦然。当找到它时,它将当前元素替换为下一个元素(离开&#34;波斯尼亚和黑塞哥维那,波斯尼亚和黑塞哥维那&#34;)。后续的array_unique应该完成这项工作。
问题是“如果&#39;部分不起作用。如果我更换&#39; false&#39;使用&#39; 0&#39;,它会在所有情况下被触发。我还以其他方式摆弄了这段代码(例如=== true而不是!== false或$ gloc而不是$ glocs [$ g-1]),但它没有工作我想要的方式。
请帮我解决问题。也许我还缺少另一种方法。感谢。
最终我创建了一系列多余的单词,如&#34;&#34;,&#34; Arrondisement&#34; (对于Paris)并开始针对此数组运行元素,从而消除包含冗余单词的元素。
答案 0 :(得分:0)
您的方法中存在一个小的逻辑错误。您将仅使用下一个覆盖类似的值 好的,现在你有两个完全相同的“Herzegovina”。
$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"
}
查看下一个解决方案(删除双值)
决定哪种方法更好,但也必须改进
删除值“Herzegovina”
这当然不是最终的解决方案
这并不容易。对于比较,还有其他重要因素。
<?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"
}