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
Форумы портала PHP.SU :: Версия для печати :: найти в масиве значение и прибавить 1
Форумы портала PHP.SU » » Вопросы новичков » найти в масиве значение и прибавить 1

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

1. kuller - 27 Апреля, 2012 - 08:48:06 - перейти к сообщению
подскажите как зделать поиск по массиву, выбрать нужное значение, прибавить +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 и т.п.
2. Panoptik - 27 Апреля, 2012 - 08:53:38 - перейти к сообщению
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.  
3. sheff2000 - 27 Апреля, 2012 - 08:56:57 - перейти к сообщению
думаю самый простой способ обрабатывать полученный массив в цикле

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
4. kuller - 27 Апреля, 2012 - 09:04:35 - перейти к сообщению
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
5. sheff2000 - 27 Апреля, 2012 - 09:12:08 - перейти к сообщению
kuller пишет:
тоже на выходе выдает одну цыфру, за место строки 1,3,4,5


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


добавьте в конце кода строку
6. EuGen - 27 Апреля, 2012 - 09:25:07 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $sData  = '1,9,4,2,7';
  2. $iValue = 9;
  3. $sData  = preg_replace('/(^|,)'.$iValue.'(,|$)/', "\${1}".($iValue+1)."\${2}", $sData);
  4. //echo($sData);

?
7. kuller - 27 Апреля, 2012 - 10:18:43 - перейти к сообщению
sheff2000 пишет:
kuller пишет:
тоже на выходе выдает одну цыфру, за место строки 1,3,4,5


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


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


вывожу $exp[$key] мне результат надо записать обратно в базу точно также разделёными запятыми
8. sheff2000 - 27 Апреля, 2012 - 10:35:55 - перейти к сообщению
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;
9. kuller - 27 Апреля, 2012 - 10:41:00 - перейти к сообщению
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;


всем спасибо. работает теперь.

 

Powered by ExBB FM 1.0 RC1