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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
qtk
Отправлено: 16 Декабря, 2013 - 14:00:40
Post Id


Частый гость


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


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




Здравствуйте. Помогите пожалуйста как значение одного массива заменить на значение второго?
PHP:
скопировать код в буфер обмена
  1.  
  2.  $str = 'тут текст %s, а тут число %i и снова текст %s';
  3.  $arr1 = array('%s', '%i', '%s');
  4.  $arr2 = array('трололо', 123, 'ололо');
  5.  

В итоге надо получить строку 'тут текст ТРОЛОЛО, а тут число 123 и снова текст ОЛОЛО'
Спасибо!
 
 Top
IllusionMH
Отправлено: 16 Декабря, 2013 - 14:11:22
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




qtk, почитайте комментарии к sptintf
Там много различных реализаций сделали.

А если дать уникальные имена для замен, тогда можно спокойно передать 2 массива в preg_replace.
Либо в цикле забирать первые элементы двух массивов, и менять через preg_replace ограничив кол-во замен до 1.

(Отредактировано автором: 16 Декабря, 2013 - 14:13:36)

 
 Top
teddy
Отправлено: 16 Декабря, 2013 - 14:11:39
Post Id


Участник


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


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




Цитата:
В итоге надо получить строку 'тут текст ТРОЛОЛО, а тут число 123 и снова текст ОЛОЛО'

Если нужно именно 2 массива тогда см. http://www.php.net/function.array-replace
но тут даже можно 1 массивом обойтись
PHP:
скопировать код в буфер обмена
  1. $str = 'тут текст %s, а тут число %d и снова текст %s';
  2. $arr = array('трололо', 123, 'ололо');
  3. printf("$str", $arr[0],$arr[1],$arr[2]);

(Отредактировано автором: 16 Декабря, 2013 - 14:29:08)

 
 Top
qtk
Отправлено: 16 Декабря, 2013 - 14:44:52
Post Id


Частый гость


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


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




[quote=teddy][/quote] у меня не стандартные модификаторы.
 
 Top
EuGen Администратор
Отправлено: 16 Декабря, 2013 - 16:54:34
Post Id


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


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


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




PHP:
скопировать код в буфер обмена
  1. $str = 'тут текст %s, а тут число %i и снова текст %s';
  2. $arr1 = array('%s', '%i', '%s');
  3. $arr2 = array('трололо', 123, 'ололо');
  4. $i    = 0;
  5.  
  6. $result = array_reduce($arr1, function($current, $item) use ($arr2, &$i)
  7. {
  8.    return $current = preg_replace('/'.preg_quote($item).'/', $arr2[$i++], $current, 1);
  9. }, $str);
  10.  
  11. //var_dump($result);

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
qtk
Отправлено: 17 Декабря, 2013 - 06:36:30
Post Id


Частый гость


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


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




В принципе я изначально не правильно сформулировал вопрос. Нужно не массив на массив заменить, а элементы в строке, согласно порядку массива.
(Добавление)
EuGen пишет:
PHP:
скопировать код в буфер обмена
  1. $str = 'тут текст %s, а тут число %i и снова текст %s';
  2. $arr1 = array('%s', '%i', '%s');
  3. $arr2 = array('трололо', 123, 'ололо');
  4. $i    = 0;
  5.  
  6. $result = array_reduce($arr1, function($current, $item) use ($arr2, &$i)
  7. {
  8.    return $current = preg_replace('/'.preg_quote($item).'/', $arr2[$i++], $current, 1);
  9. }, $str);
  10.  
  11. //var_dump($result);

?

Думую код работает, но постораюсь найти решение попроще.
 
 Top
Invert
Отправлено: 17 Декабря, 2013 - 06:58:49
Post Id



Частый гость


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


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




Проще всего:

PHP:
скопировать код в буфер обмена
  1.  
  2. $string = str_replace(
  3.     array( '%a%', '%b%', '%c%' ),
  4.     array( 'A', 'B', 'C' ),
  5.     'Это %a% просто %b% строка %c%'
  6. );
  7.  
 
 Top
qtk
Отправлено: 17 Декабря, 2013 - 08:12:44
Post Id


Частый гость


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


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




Invert пишет:
Проще всего:

PHP:
скопировать код в буфер обмена
  1.  
  2. $string = str_replace(
  3.     array( '%a%', '%b%', '%c%' ),
  4.     array( 'A', 'B', 'C' ),
  5.     'Это %a% просто %b% строка %c%'
  6. );
  7.  

Не проще, так как модификаторы повторяются и однотипные заменяется все одним значением, а не в соответствии с массивом.
 
 Top
Invert
Отправлено: 17 Декабря, 2013 - 08:23:32
Post Id



Частый гость


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


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




Ну простите меня, я то хотел помочь, а там оказывается модификаторы повторяются, да еще и однотипный заменяются все одним значением.

Может нормальный, развернутый пример, чтобы без трололо?
 
 Top
qtk
Отправлено: 17 Декабря, 2013 - 09:57:13
Post Id


Частый гость


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


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




Не в коем случае не хотел ни кого обидеть. Вот пример
PHP:
скопировать код в буфер обмена
  1.  
  2. $arg = array('text1', 123, 'text2 *');
  3. $sql = 'SELECT * FROM ?s WHERE id= ?i and text=?s';
  4. preg_match_all('#\?[sifanb]{1}#', $sql, $format);
  5. if(count($arg) === count($format[0]))
  6. {
  7.     for($i = 0; $i < count($arg); $i++)
  8.     {
  9.         if($format[0][$i] == '?s' and !is_string($arg[$i])) die('no str ');
  10.         elseif($format[0][$i] == '?i' and !is_int($arg[$i])) die('no int ');
  11.         else $b = TRUE;
  12.     }
  13.     if($b === TRUE)
  14.     {
  15.         //Тут какой-то код замены в строке
  16.     }
  17.     echo $sql;
  18. }
  19.  

Прошу код не комментировать это так быстрые наброски
 
 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