Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: помогите с массивом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
belousov
Отправлено: 07 Апреля, 2010 - 17:53:52
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




как удалить из массива ключ и данные, если в данных отсутствует определенное слово еще и за определенный период.
массив выглядит так:
ключ:07.04.10 17:00
данные:текст и теги
в некоторых данных присутствует слово "like" .
Нужно убрать все данные которые не содержат это слово, для начала.
Задача вообще посчитать сколько слов "like" за семь дней, но пока только получилось все это собрать в массив.

(Отредактировано автором: 07 Апреля, 2010 - 17:55:46)

 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Апреля, 2010 - 18:06:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ну так берете полученый массив проходите по нему циклом а внем условие if(есть в текущем значении ваш like) {$count_like++; unset <тот самый ключ>;}
 
 Top
belousov
Отправлено: 07 Апреля, 2010 - 18:12:49
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Ну в том то и проблема что я не знаю как найти слово в массиве?
И как указать ключ строки если она не соответствует условию?
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Апреля, 2010 - 18:17:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Слово ищите регулярками а дату сверяйте с нужным диапазоном... Все те же условия if.....

1. получили массив

2. пробили валидность даты (работаем с ключами как со значениями - у вас же многомер)

3. нашли в оставшихся слово "like"

4. обработали результат
 
 Top
JustUserR
Отправлено: 08 Апреля, 2010 - 13:36:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




belousov Можете использовать функцию филтрации http://www.php.su/functions/?array-filter и в задаваемой функции обратного вызова использовать необходимую проверку и формирование нового массива


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
belousov
Отправлено: 08 Апреля, 2010 - 15:01:15
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




убрал время, теперь только дата, но он сравнивает как число, потому результат неправильный. Как можно сравнить его как дату?
PHP:
скопировать код в буфер обмена
  1. $sdate = '02.04.10';
  2. while ($test5 = key($test2)) {
  3.     if ($test5 <= "$sdate") {
  4.         echo key($test2).'<br />';
  5.     }
  6.     next($test2);
  7. }

(Отредактировано автором: 08 Апреля, 2010 - 15:01:51)

 
 Top
JustUserR
Отправлено: 08 Апреля, 2010 - 16:15:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




belousov пишет:
убрал время, теперь только дата, но он сравнивает как число, потому результат неправильный. Как можно сравнить его как дату?
Лучший способ сравнивать дату и время это перевести их в формат timestamp с помощью функции http://www.php.su/functions/?strtotime и далее работать с ними как с обычными числами


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
belousov
Отправлено: 08 Апреля, 2010 - 16:49:42
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Теперь еще больше запутался. Мне надо считать ключ массива (который является датой), преобразовать в юних дату и засунуть в массив? или преобразовать, сравнить и выполнить действия?
(Добавление)
не работает, точнее неправильно работает, насколько я понял потому что год "10" а не "2010". И месяц "04" а не просто "4".
PHP:
скопировать код в буфер обмена
  1. $sdate = '02.04.10';
  2. $date_elements  = explode(".",$sdate);
  3. $ssdate =  mktime(0,0,0,$date_elements[1],$date_elements[0],$date_elements[2]);
  4. while ($test5 = key($test2)) {
  5. $date_elements1  = explode(".",$test5);
  6. $ss1date = mktime(0,0,0,$date_elements1[1],$date_elements1[0],$date_elements1[2]);
  7.     if ($ssdate == "$ss1date") {
  8.         unset ($test2[$test5]);
  9.     }
  10.     next($test2);
  11. }
 
 Top
belousov
Отправлено: 08 Апреля, 2010 - 19:12:10
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Проверил 02.4.2010 и 02.04.10 выглядит одинаково.
Что тогда не так? Может неправильная функция сравнения?
 
 Top
Тоха
Отправлено: 08 Апреля, 2010 - 19:36:46
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010  
Откуда: Орел, Россия


Помог: 0 раз(а)




конечно неправильная Улыбка зачем там кавычки?
 
 Top
markus4
Отправлено: 08 Апреля, 2010 - 22:10:25
Post Id



Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Улыбка


-----
Нет вокруг ничего кроме бесконечного журчания опкодов вселенной...
 
 Top
CenapaTop
Отправлено: 09 Апреля, 2010 - 00:10:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009  


Помог: 1 раз(а)




PHP:
скопировать код в буфер обмена
  1. $count = 0;
  2. $arr = array('07.04.10 17:00' => 'like sssssssss like ddddddd',
  3.         '06.04.10 11:00' => 'sssssss alike dddddd like',
  4.          '07.04.10 12:33' => 'dddddd sssssssssss ike',
  5.          '05.02.10 ' => 'hhhhhh uuuuuuuuuu lik like ');
  6.  
  7. foreach($arr as $key=>$val) {
  8.   $mass = explode('.', substr($key, 0, 8));
  9.   $ut = mktime(0,0,0,$mass[1],$mass[0],$mass[2]);
  10.   if ($ut > time()-60*60*24*7 && ($pm = preg_match_all('#\blike\b#si', $val, $v))  $count += $pm;
  11. }
  12. echo $count;

(Отредактировано автором: 09 Апреля, 2010 - 00:17:29)

 
 Top
belousov
Отправлено: 09 Апреля, 2010 - 11:36:34
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




CenapaTop PHP Parse error: parse error in zp1.php on line 214
PHP:
скопировать код в буфер обмена
  1. if ($ut > time()-60*60*24*7 && ($pm = preg_match_all('#\blike\b#si', $val, $v))  $count += $pm;

Все нашел ($pm лишняя скобка.
Обьясните пожалуйста что такое "time()-60*60*24*7" здесь у меня по идее будет переменная введенная пользователем с даты - по дату.
В своем коде я хотел удалить все ключи больше указанной даты "с", потом все ключи меньше указанной даты "по", потом обработать все значения если в них есть like то некст иначе унсет. Только ничего не работает)))

(Отредактировано автором: 09 Апреля, 2010 - 11:48:29)

 
 Top
CenapaTop
Отправлено: 09 Апреля, 2010 - 11:46:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009  


Помог: 1 раз(а)




PHP:
скопировать код в буфер обмена
  1. if ($ut > time()-60*60*24*7 && ($pm = preg_match_all('#\blike\b#si', $val, $v)))  $count += $pm;
 
 Top
JustUserR
Отправлено: 09 Апреля, 2010 - 11:55:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




belousov пишет:
В своем коде я хотел удалить все ключи больше указанной даты "с", потом все ключи меньше указанной даты "по", потом обработать все значения если в них есть like то некст иначе унсет. Только ничего не работает)))
Лучше бы вы хранили ключи в виде timestamp-времени - это поволяет точно удалять записи с момент создания которых прошла неделя без округления за счет простой проверки 60*60*24*7 - иначе вам приходится не только выполнять лишние преобразования но и проверять дополнительные временные условия


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB