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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> унификация массива, PHP программирование массивов 
:(
    Опции темы
-V-
  Дата 26.3.2005, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: -1
Всего: 0



Постановка задачи:

Существует массив записей string

a[0] = "петя";
a[1] = "маша";
a[2] = "петя";
a[3] = "сырожа";
a[4] = "вова";
...
a[n] = "cdefghjklmnpoq";

как видно некоторые записи в разных елементах совпадают...

Вопрос:
Как на PHP написать скрипт очистки совпадений в массиве ... т.е. чтобы например запись "петя" не повторялась, а была записана только в первый елемент массива, со здвигом всех остальных елементов. ???


П.С.

Если до обработки все данные в массиве равны "петя" то в массиве остаётся одна запись

Благодарности
Спасибо огромное за помощь smile

Это сообщение отредактировал(а) -V- - 26.3.2005, 19:58
PM MAIL ICQ   Вверх
Irokez
Дата 26.3.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



array_unique()
PM   Вверх
-V-
Дата 27.3.2005, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: -1
Всего: 0



Ты что серьёзно одной функией????? ОТЭТО Я ТУПОЙ!!!!
Спасибо!
PM MAIL ICQ   Вверх
VoAnt
Дата 27.3.2005, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.4.2004
Где: Украина г. Киев

Репутация: -1
Всего: 2



Так, есть проблеммы..

Дело в том что унификация через функцию, не сдвигает массив .. т.е. кол-во елементов остаётся прежним! А НУЖНО ЧТОБ унификация была не только совпадений но и уменьшение размера массива..

Я пытался делать через if .. не рпботает .. посмотрите код в чем ошибка?

Код

<?

$ar[0] = "111";
$ar[1] = "111";
$ar[2] = "222";
$ar[3] = "111";
$ar[4] = "222";
$ar[5] = "444";
$ar[6] = "222";
$ar[7] = "444";
$ar[8] = "333";
$ar[9] = "333";

$ar = array_unique($ar);

echo "************************************************** array uniqued elements in array!<br>";
echo $ar[0]."<br>";
echo $ar[1]."<br>";
echo $ar[2]."<br>";
echo $ar[3]."<br>";
echo $ar[4]."<br>";
echo $ar[5]."<br>";
echo $ar[6]."<br>";
echo $ar[7]."<br>";
echo $ar[8]."<br>";
echo $ar[9]."<br>";
$p = 0;

for ($i=0;$i<=count($ar);$i++) {
 if (isset($ar[$i])) {$d[$p] = $ar[$i]; $p++;}
}

echo "************************************************** All elements in new array!<br>";
echo $d[0]."<br>";
echo $d[1]."<br>";
echo $d[2]."<br>";
echo $d[3]."<br>";
echo $d[4]."<br>";
echo $d[5]."<br>";
echo $d[6]."<br>";
echo $d[7]."<br>";
echo $d[8]."<br>";
echo $d[9]."<br>";

echo "**************************************************WHAT A %%%%???";
?>


Это сообщение отредактировал(а) VoAnt - 27.3.2005, 02:54
PM MAIL ICQ   Вверх
Opik
Дата 27.3.2005, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Код

$val[0] = "1";
$val[1] = "1";
$val[2] = "1";
$val[3] = "2";
$val[4] = "3";
$val = array_unique($val);
$clean = array_merge($val);
var_dump($clean);

PM MAIL Skype   Вверх
Gold Dragon
Дата 27.3.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Я не супер в PHP, но может так
Код

//массив
$a = Array();
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";

//удаляем дуляж
$a=array_unique($a);

$b = Array();
$i = 0;

//прямой перебор
foreach ($a as $z1 => $z2)
{
$b[$i] = $z2;
$i++;
}

print_r($b);



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
VoAnt
Дата 27.3.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.4.2004
Где: Украина г. Киев

Репутация: -1
Всего: 2



Cупер! Всё работает 2Opr.

PM MAIL ICQ   Вверх
IZ@TOP
Дата 27.3.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



А не проще:

Код

$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";

$a = array_flip($a);
$a = array_keys($a);



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Opik
Дата 27.3.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



IZ@TOP
чем проще чем у меня? так же 2 функции smile))
PM MAIL Skype   Вверх
Gold Dragon
Дата 27.3.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



IZ@TOP
а что получается ?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 27.3.2005, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Opr, у тебя лишняя переменная задейстована smile Я их экономлю smile
Добавлено @ 18:05
Red Dragon, а что? нет?
Добавлено @ 18:07
А вообще, если на то пошло, то лучше при получении данных заносить не как значения, а как ключи. Соответственно так как идентичных ключей не будет, мы получим уникальный набор значений.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
IZ@TOP
Дата 27.3.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Да, и вариант с ключами работает в три раза быстрее чем при использовании array_unique.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Irokez
Дата 27.3.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



IZ@TOP как проверял?
PM   Вверх
IZ@TOP
Дата 27.3.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Irokez так:

Код

<pre>
<?php
function benchmark($begin, $scale = 3)
{
   $end   = explode(' ', microtime());
   $end   = array_sum($end);
   $begin = explode(' ', $begin);
   $begin = array_sum($begin);
   return round($end - $begin, $scale);
}

$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "п34етя";
$a[] = "с43ырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маш3а";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "пr43етя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вов34а";
$a[] = "ку23зя";
$a[] = "петя";
$a[] = "ма34ша";
$a[] = "пеr234тя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "во34ва";
$a[] = "кузя";
$a[] = "петя";
$a[] = "ма34ша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "пеt53tтя";
$a[] = "маша";
$a[] = "пеацукwwtтя";
$a[] = "сыцарожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "н54петя";
$a[] = "ман54ша";
$a[] = "пе8нццтя";
$a[] = "сн54ырожа";
$a[] = "вогва";
$a[] = "кун54зя";
$a[] = "пее2тя";
$a[] = "машвуц2ка";
$a[] = "пенц4тя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "петя";
$a[] = "маша";
$a[] = "петя";
$a[] = "сырожа";
$a[] = "вова";
$a[] = "кузя";
$a[] = "пе63тя";
$a[] = "ман5446реша";
$a[] = "п4545н64356путя";
$a[] = "сы4крожа";
$a[] = "во4н54ва";
$a[] = "к454ннкузя";
$a[] = "п53етя";
$a[] = "мн35аша";
$a[] = "пен45нтя";
$a[] = "с4кырожа";
$a[] = "вова";
$a[] = "ку23зя";
$a[] = "пе4тя";
$a[] = "машапку";
$a[] = "пепуктя";
$a[] = "сыпукац3рожа";
$a[] = "вокпук4ва";

$begin_a    = microtime();
$b    = array_flip($a);
$b    = array_keys($b);
$ba    = benchmark($begin_a, 6);
$begin_b    = microtime();
$a    = array_unique($a);
$b    = array_merge($a);
$bb    = benchmark($begin_b, 6);

echo "$ba - $bb";

?></pre>

Добавлено @ 18:28
И если массив увеличить раза в три-четыре, производительность вырастет в пять раз.
Добавлено @ 18:29
А если еще поменять это
Код

$b    = array_flip($a);
$b    = array_keys($b);

на это
Код

$b    = array_keys(array_flip($a));
то еще чуть быстрее.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Irokez
Дата 27.3.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



ну а если поменять оба варианта местами, то первое время будет также меньше второго
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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