Автор Тема: Одинаковые элементы в массиве  (Прочитано 4074 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Serge2k

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Одинаковые элементы в массиве
« : 02 Января 2003, 18:45:03 »
Здравствуйте! С Новым годом!

Есть такая ситуация: скрипт берет текст (переданный переменной $text) и выбирает из него отдельные слова, выводя их построчно на экран:

preg_match_all(\'/([a-zA-Zа-яА-Я]+)/\',$text,$ok);

for ($i=0; $i {

echo $ok[1][$i]."
";
}

Нужно убрать совпадающие слова, чтобы на экран одно и то же слово выводилось только один раз.

Судя по тому, что написано в официальном мануале, одинаковые элементы из массива убирает функция array_unique (http://www.php.net/manual/en/function.array-unique.php)

Но скрипт с использованием этой функции не работает:

preg_match_all(\'/([a-zA-Zа-яА-Я]+)/\',$text,$ok);

$ok = array_unique ($ok);


for ($i=0; $i {

echo $ok[1][$i]."
";
}


Здесь я явно в чем-то ошибаюсь. Что я делаю неправильно?
Create the Web!

Оффлайн Flash

  • Виртуоз...
  • Ветеран
  • *****
  • Сообщений: 661
  • +0/-0
  • 2
    • Просмотр профиля
Одинаковые элементы в массиве
« Ответ #1 : 02 Января 2003, 18:53:58 »
а массив $ok тебе передаёт ожидаемые параматры??
Почему так всегда: мозги утекают, а доноры остаются?

Оффлайн Serge2k

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Одинаковые элементы в массиве
« Ответ #2 : 02 Января 2003, 19:44:45 »
Да уж, бывает... Не поставил единичку. Теперь функция работает:

preg_match_all(\'/([a-zA-Zа-яА-Я]+)/\',$text,$ok);

$ok = array_unique ($ok[1]);

for ($i=0; $i{
echo $ok[$i]."
";
}

Вот только получается не совсем то, чего мне хотелось бы. Функция, как выяснилось, совпадающие элементы заменяет пустыми, то есть по всей видимости массив

$a[0] = 13;
$a[1] = 12;
$a[2] = 13;
$a[3] = 15;

меняется на

$a[0] = 13;
$a[1] = 12;
$a[2] = ;
$a[3] = 15;

Во всяком случае, значение 15 остается по прежнему за третьим элементом. А нужно, чтобы он становился таким:

$a[0] = 13;
$a[1] = 12;
$a[2] = 15;

То есть, чтобы одинаковые элементы не только становились пустыми, но и исчезали как таковые, а на их место становились другие.

Можно ли это сделать в рамках array_unique, или для удаления пустых элементов служит какая-то другая функция?
Create the Web!

Оффлайн GotZfild

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Одинаковые элементы в массиве
« Ответ #3 : 02 Января 2003, 20:04:04 »
Немного перепишем

$words 
explode(" "$text);
$words array_values(array_unique($words));
for (
$i 0$i sizeof($words); $i++) {
    if (
trim($words[$i])) echo $words[$i]."
"
;
}
После трех дней без программирования жизнь становится бессмысленной.

Оффлайн Serge2k

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Одинаковые элементы в массиве
« Ответ #4 : 02 Января 2003, 20:36:58 »
Ну что ж, похоже, тему можно закрывать - если кто-нибудь из модераторов сочтет нужным, может смело сделать это. Спасибо за размышления над вопросом.

Здесь действительно в тему используется array_values в паре с array_unique . Я этого не знал. Еще раз спасибо и всех с Новым годом!
Create the Web!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Одинаковые элементы в массиве
« Ответ #5 : 03 Января 2003, 00:30:09 »
GotZfild, ты, конечно, хорошее дело сделал, дал рабочий код.
А как быть с дремучими заблуждениями г-на Serge2k по поводу работы функции array_unique и того, что в массивах в РНР бывает первый, третий, или десятый элемент, а не элемент с индексом \'1\', \'3\', \'10\'?

Видишь - товарищ даже тему попросил закрыть, уверенный в том, что все понял.

Оффлайн Serge2k

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Одинаковые элементы в массиве
« Ответ #6 : 03 Января 2003, 01:52:32 »
В общем-то, хотелось бы кое-что уточнить. Никакой уверенности в том, что я все понял, я не изъявлял. GotZfild продемонстрировал конкретное решение проблемы, я с этим решением согласился и поблагодарил (я ведь не написал "спасибо, я все понял"). У меня сейчас жуткая сессия (через 7 часов экзамен), и нету времени читать в мануале на php.net описание функций для работы с массивами. Когда время будет, обязательно почитаю. Я сейчас пишу некоторые скрипты, поскольку это меня расслабляет, освобождает мозг от учебы. Это своеобразный отдых. Столкнулся с проблемой, глянул в мануал. Увидел там array_unique. Использовал. Не получилось. Спросил. Об array_values не знал.
Использование слова "индекс" в терминологии массивов многократно встречал. Но намного проще писать "первый элемент", чем "элемент с индексом \'1\'". Буду переучиваться.
Спасибо за конструктивную критику.
Create the Web!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Одинаковые элементы в массиве
« Ответ #7 : 03 Января 2003, 12:07:57 »
А ты безнадежен.
Вместо вопросов - какие-то никому не нужные оправдания.
"Спасибо за конструктивную критику" - и тут же демонстрация полного недохождения этой самой критики до расслабленного мозга.

Словоблуд.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28