За последние 24 часа нас посетил 18441 программист и 1704 робота. Сейчас ищут 948 программистов ...

Вопрос про foreach()

Тема в разделе "PHP для новичков", создана пользователем Aquila, 22 май 2011.

  1. Aquila

    Aquila Активный пользователь

    С нами с:
    17 апр 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Дания
    Тут такое дело... Решил протестировать как работает foreach и удивился...

    Попробуйте у себя запустить.
    PHP:
    1.  
    2. <?
    3. $array = array(
    4. 'one'=>'1',
    5. 'two'=>'2',
    6. 'three'=>'3',
    7. 'four'=>'4',
    8. 'five'=>'5'
    9. );
    10.  
    11. $string = '<p>i-one<b>|</b>ii-two<b>|</b>iii-three<b>|</b>iv-four<b>|</b>v-five</p>';
    12.  
    13. foreach($array as $pattern => $replacement)
    14. {
    15.     $string .= preg_replace('/'.$pattern.'/i',$replacement,$string);
    16. }
    17. echo $string;
    18. ?>
    19.  
    Я ожидал увидеть что-то вроде такого:
    i-one|ii-two|iii-three|iv-four|v-five
    i-1|ii-two|iii-three|iv-four|v-five
    i-one|ii-2|iii-three|iv-four|v-five
    i-one|ii-two|iii-3|iv-four|v-five
    i-one|ii-two|iii-three|iv-4|v-five
    i-one|ii-two|iii-three|iv-four|v-5

    А получилось..
    i-one|ii-two|iii-three|iv-four|v-five
    i-1|ii-two|iii-three|iv-four|v-five
    i-one|ii-2|iii-three|iv-four|v-five
    i-1|ii-2|iii-three|iv-four|v-five
    i-one|ii-two|iii-3|iv-four|v-five
    i-1|ii-two|iii-3|iv-four|v-five
    i-one|ii-2|iii-3|iv-four|v-five
    i-1|ii-2|iii-3|iv-four|v-five
    i-one|ii-two|iii-three|iv-4|v-five
    i-1|ii-two|iii-three|iv-4|v-five
    i-one|ii-2|iii-three|iv-4|v-five
    i-1|ii-2|iii-three|iv-4|v-five
    i-one|ii-two|iii-3|iv-4|v-five
    i-1|ii-two|iii-3|iv-4|v-five
    i-one|ii-2|iii-3|iv-4|v-five
    i-1|ii-2|iii-3|iv-4|v-five
    i-one|ii-two|iii-three|iv-four|v-5
    i-1|ii-two|iii-three|iv-four|v-5
    i-one|ii-2|iii-three|iv-four|v-5
    i-1|ii-2|iii-three|iv-four|v-5
    i-one|ii-two|iii-3|iv-four|v-5
    i-1|ii-two|iii-3|iv-four|v-5
    i-one|ii-2|iii-3|iv-four|v-5
    i-1|ii-2|iii-3|iv-four|v-5
    i-one|ii-two|iii-three|iv-4|v-5
    i-1|ii-two|iii-three|iv-4|v-5
    i-one|ii-2|iii-three|iv-4|v-5
    i-1|ii-2|iii-three|iv-4|v-5
    i-one|ii-two|iii-3|iv-4|v-5
    i-1|ii-two|iii-3|iv-4|v-5
    i-one|ii-2|iii-3|iv-4|v-5
    i-1|ii-2|iii-3|iv-4|v-5

    Мб кто-то знает в чем дело?))
     
  2. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    PHP:
    1. <?
    2.  $array = array(
    3.  'one'=>'1',
    4.  'two'=>'2',
    5.  'three'=>'3',
    6.  'four'=>'4',
    7.  'five'=>'5'
    8.  );
    9.  
    10.  $string[] = '<p>i-one<b>|</b>ii-two<b>|</b>iii-three<b>|</b>iv-four<b>|</b>v-five</p>';
    11.  
    12.  foreach($array as $pattern => $replacement)
    13.  {
    14.      $string []= preg_replace('/'.$pattern.'/i',$replacement,$string[0]);
    15.  }
    16.  print implode('',$string);
    17.  
     
  3. siiXth

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    ненадо называть 2 разные переменные одним названием
    $string = '<p>i-one<b>|</b>ii-two<b>|</b>iii-three<b>|</b>iv-four<b>|</b>v-five</p>';
    и
    $string .= preg_replace('/'.$pattern.'/i',$replacement,$string);

    вдумайся что делает сама с собой вторая строка
     
  4. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    а вот еще

    PHP:
    1.  <?
    2.  $array = array(
    3.  'one'=>'1',
    4.  'two'=>'2',
    5.  'three'=>'3',
    6.  'four'=>'4',
    7.  'five'=>'5'
    8.  );
    9.  
    10.  $string_start = '<p>i-one<b>|</b>ii-two<b>|</b>iii-three<b>|</b>iv-four<b>|</b>v-five</p>';
    11.  
    12.  foreach($array as $pattern => $replacement)
    13.  {
    14.      $string .= preg_replace('/'.$pattern.'/i',$replacement,$string_start);
    15.  }
    16.  echo $string_start.$string;
     
  5. Aquila

    Aquila Активный пользователь

    С нами с:
    17 апр 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Дания
    siiXth
    Ты прав, спасибо.
    Alex_pac
    Спасибо за варианты ответа.

    Проблема решена так:
    PHP:
    1.  
    2. <?
    3. $array = array(
    4.  'one'=>'1',
    5.  'two'=>'2',
    6.  'three'=>'3',
    7.  'four'=>'4',
    8.  'five'=>'5'
    9.  );
    10.  
    11.  $starting_string = '<p>i-one<b>|</b>ii-two<b>|</b>iii-three<b>|</b>iv-four<b>|</b>v-five</p>';
    12.  $string = null;
    13.  
    14.  foreach($array as $pattern => $replacement)
    15.  {
    16.      $string .= preg_replace('/'.$pattern.'/i',$replacement,$starting_string);
    17.  }
    18.  echo $string;
    19.  
    P.S. Alex_pac, во втором варианте показывет ошибку что не найдена переменная $string где $string .= preg_replac... , а если убрать точку то выдает:
    i-one|ii-two|iii-three|iv-four|v-five
    i-one|ii-two|iii-three|iv-four|v-5
     
  6. Aquila

    Aquila Активный пользователь

    С нами с:
    17 апр 2011
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Дания
    Что-то я уж сильно тут тупанул)) Плохо насиловать свой мозг, потом часто не понемаешь очевидные вещи)) Всем еще раз спасибо, спокойной ночи.