Удаление элементов массива, которые содержат другие элементы массива

У меня есть массив объектов местоположения Google, взятых из API геокодирования ($ glocs). Иногда один элемент массива частично повторяется в другом (например, «Федерация Боснии и Герцеговины, Боснии и Герцеговины»). Когда я вывожу их во внешнем интерфейсе, используя массив, разделенный запятой, я хочу, чтобы вывод выглядел менее роботизированным. Я написал этот код, чтобы избежать повторения имен:

$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 должно завершить работу.

Проблема в том, что раздел «если» не работает. Если я заменю «ложь» на «0», это срабатывает во всех случаях. Я также возился с этим кодом другими способами (например, === true вместо! == false или $ gloc вместо $ glocs [$ g-1]), но он не работал так, как я хотел ,

Пожалуйста, помогите мне решить мою проблему. Может быть, есть другой подход, который я пропускаю. Благодарю.


В конце концов я создал массив избыточных слов, таких как «Федерация», «Район» (для Парижа), и начал запускать элементы для этого массива, исключая те, которые содержат избыточное слово.

0

Решение

Небольшая логическая ошибка в вашем подходе. Вы перезапишете только аналогичное значение следующим.
Хорошо, теперь у вас есть два одинаковых «Герцеговина».

$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"}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector