Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление дублей массива по маске 
V
    Опции темы
slva2000
Дата 19.7.2010, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 29.10.2005

Репутация: нет
Всего: нет



Здравствуйте!

Уже сломал голову, прошу помощи.

Имею массив вида:


Код

[0] => http://www.site.ru/~classic_2/2.htm
[1] => http://www.site.ru/~classic_2/13.htm
[2] => http://www.mega_site.ru/~classic_4/1.htm
[3] => http://www.site.ru/~classic_3/13.htm



Нужно удалить строки, если одинаковые строки, выделенные жёлтым повторяются, т.е. в данном примере дубли будут эллемент 1.

Результатом д.б. массив:


Код

[0] => http://www.site.ru/~classic_2/2.htm
[2] => http://www.mega_site.ru/~classic_4/1.htm
[3] => http://www.site.ru/~classic_3/13.htm



Мои попытки:


Код

foreach($resu as $item)
{
    preg_match("#/\~(\S+)/#i", $item, $match);
    $tild = $match[1];

    foreach ($resu as $item2)
    {
        $match2[1] = "";
        preg_match("#/\~(\S+)/#i", $item2, $match2);
        $tild2= $match2[1];

        if (trim($tild) == trim($tild2))
        {
            break;
        }
        else
            $result []= $item;
    }
}


Где то ошибка, и не могу понять где... :(. Прошу помощи!

Это сообщение отредактировал(а) slva2000 - 19.7.2010, 08:40
PM MAIL   Вверх
skyboy
Дата 19.7.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Код

function uniqueElementsByPart($el) {
 static $justBeen = array();
 if (preg_match("#/\~(\S+)/#i", $el, $match)) {
   if (in_array($match[1], $justBeen)) {
     return false;
   } else {
      $justBeen[] = $match[1];
      return true;
   }
 } else {
   return true;
 }
}

$rezu = array_filter($rezu, "uniqueElementsByPart");

PM MAIL   Вверх
slva2000
Дата 19.7.2010, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 29.10.2005

Репутация: нет
Всего: нет



smile Работает. Спасибо.

Попытался разобрать, так не и не хватило ума... 

Код

function uniqueElementsByPart($el) {
 static $justBeen = array();
 if (preg_match("#/\~(\S+)/#i", $el, $match)) {
   if (in_array($match[1], $justBeen)) {
     return false;
   } else {
      $justBeen[] = $match[1]; // здесь же всего часть адреса... и зачем массив? Почему возвращается целая строка?
      return true;
   }
 } else {
   return true;
 }
}

$rezu = array_filter($rezu, "uniqueElementsByPart");


Вероятно я не понимаю как работает callback функция... 
PM MAIL   Вверх
skyboy
Дата 19.7.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(slva2000 @  19.7.2010,  10:07 Найти цитируемый пост)
здесь же всего часть адреса...

ну, ты же по этой части собирался условие уникальности проверять, верно?
array_filter вызывает uniqueElementsByPart для каждого элемента, а та должна вернуть либо true(оставить элемент в массиве), либо false - удалить элемент из массива.
в самой функции uniqueElementsByPart происходит вычлениение части строки и проверка: эта часть нам попадалась раньше в других элементах(проверка в массиве $justBeen - "уже было"; массив помечен как static потому что его значение должно сохраняться между вызовами функции - кстати говоря, потому эта функция может быть использована в данном виде только единожды - если захочешь использовать её в другом месте, то массив $justBeen будет полон элементов)
PM MAIL   Вверх
slva2000
Дата 19.7.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 29.10.2005

Репутация: нет
Всего: нет



Исчерпывающе! Кроме всего прочего, это для меня новая информация. Спасибо, буду применять по необходимости!
 smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.