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 :: найти в масиве значение и прибавить 1

 PHP.SU

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


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

> Без описания
kuller
Отправлено: 27 Апреля, 2012 - 08:48:06
Post Id



Частый посетитель


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


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




подскажите как зделать поиск по массиву, выбрать нужное значение, прибавить +1 и записать обратно?

строка типа 1,4,6,7 хранится в базе, достаю её и делаю массив

PHP:
скопировать код в буфер обмена
  1.  
  2. $t = $_GET['id']; // передаётся через ссылку
  3. $exp = explode(",", $row['num']); // массив
  4. $s = str_replace($exp[$t],$row['num'],$exp[$t]+1); // ищу и прибавляю. Данный код нащёл на форуме.
  5.  


код рабочий, но результат просто одна цыфра, как составить потом обратно струку 1,4,6,7 только какая нибуть цыфра будет изменена на +1 т.е. 1 на 2 4 на 5 и т.п.
 
 Top
Panoptik
Отправлено: 27 Апреля, 2012 - 08:53:38
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $t = $_GET['id']; // передаётся через ссылку
  3. $exp = explode(",", $row['num']); // массив
  4. $result = array_map(function($val){return ++$val;},$exp);
  5. var_dump($result);
  6.  

(Отредактировано автором: 27 Апреля, 2012 - 08:55:24)



-----
Just do it
 
 Top
sheff2000
Отправлено: 27 Апреля, 2012 - 08:56:57
Post Id


Новичок


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


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




думаю самый простой способ обрабатывать полученный массив в цикле

PHP:
скопировать код в буфер обмена
  1. $t = $_GET['id']; // передаётся через ссылку
  2. $exp = explode(",", $row['num']); // массив
  3.  
  4. foreach ($exp as $key => $value) {
  5.         if ($key==$t) $exp[$key]++;
  6. }
  7.  
  8.  


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

(Отредактировано автором: 27 Апреля, 2012 - 09:03:27)

 
 Top
kuller
Отправлено: 27 Апреля, 2012 - 09:04:35
Post Id



Частый посетитель


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


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




Panoptik пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $t = $_GET['id']; // передаётся через ссылку
  3. $exp = explode(",", $row['num']); // массив
  4. $result = array_map(function($val){return ++$val;},$exp);
  5. var_dump($result);
  6.  


не работает. и чёт не могу понять что за function($val) имено на это и ругается

Parse error: syntax error, unexpected T_FUNCTION, expecting ')'
(Добавление)
sheff2000 пишет:
думаю самый простой способ обрабатывать полученный массив в цикле

PHP:
скопировать код в буфер обмена
  1. $t = $_GET['id']; // передаётся через ссылку
  2. $exp = explode(",", $row['num']); // массив
  3.  
  4. foreach ($exp as $key => $value) {
  5.         if ($key==$t) $exp[$key]++;
  6. }
  7.  
  8.  


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


тоже на выходе выдает одну цыфру, за место строки 1,3,4,5

(Отредактировано автором: 27 Апреля, 2012 - 09:05:28)

 
 Top
sheff2000
Отправлено: 27 Апреля, 2012 - 09:12:08
Post Id


Новичок


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


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




kuller пишет:
тоже на выходе выдает одну цыфру, за место строки 1,3,4,5


как Вы выводите результат ?
массив $exp - содержит все исходные элементы с одним измененным на +1


добавьте в конце кода строку

(Отредактировано автором: 27 Апреля, 2012 - 09:17:55)

 
 Top
EuGen Администратор
Отправлено: 27 Апреля, 2012 - 09:25:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




PHP:
скопировать код в буфер обмена
  1. $sData  = '1,9,4,2,7';
  2. $iValue = 9;
  3. $sData  = preg_replace('/(^|,)'.$iValue.'(,|$)/', "\${1}".($iValue+1)."\${2}", $sData);
  4. //echo($sData);

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
kuller
Отправлено: 27 Апреля, 2012 - 10:18:43
Post Id



Частый посетитель


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


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




sheff2000 пишет:
kuller пишет:
тоже на выходе выдает одну цыфру, за место строки 1,3,4,5


как Вы выводите результат ?
массив $exp - содержит все исходные элементы с одним измененным на +1


добавьте в конце кода строку


вывожу $exp[$key] мне результат надо записать обратно в базу точно также разделёными запятыми
 
 Top
sheff2000
Отправлено: 27 Апреля, 2012 - 10:35:55
Post Id


Новичок


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


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




kuller пишет:
вывожу $exp[$key] мне результат надо записать обратно в базу точно также разделёными запятыми


$exp[$key] - как раз и выведет только один элемент массива с ключем $key

тогда не вижу смысла разбивать строку на массив - лишняя и не нужная операция
Вот EuGen правильный вариант предложил, только нужно переделать чтоб $iValue стал номером цифры по порядку.

но если с массивами то надо вот так тогда :
PHP:
скопировать код в буфер обмена
  1.  
  2. $t = $_GET['id']; // передаётся через ссылку
  3. $exp = explode(",", $row['num']); // массив
  4.  
  5. foreach ($exp as $key => $value) {
  6.         if ($key==$t) $exp[$key]++;
  7. }
  8. $rezult=implode(",", $exp);
  9. echo $rezult;
 
 Top
kuller
Отправлено: 27 Апреля, 2012 - 10:41:00
Post Id



Частый посетитель


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


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




sheff2000 пишет:
kuller пишет:
вывожу $exp[$key] мне результат надо записать обратно в базу точно также разделёными запятыми


$exp[$key] - как раз и выведет только один элемент массива с ключем $key

тогда не вижу смысла разбивать строку на массив - лишняя и не нужная операция
Вот EuGen правильный вариант предложил, только нужно переделать чтоб $iValue стал номером цифры по порядку.

но если с массивами то надо вот так тогда :
PHP:
скопировать код в буфер обмена
  1.  
  2. $t = $_GET['id']; // передаётся через ссылку
  3. $exp = explode(",", $row['num']); // массив
  4.  
  5. foreach ($exp as $key => $value) {
  6.         if ($key==$t) $exp[$key]++;
  7. }
  8. $rezult=implode(",", $exp);
  9. echo $rezult;


всем спасибо. работает теперь.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB