Собрать массив в строку

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 13 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Имеем массив $array[1..n]
    Надо в каждый элемент массива добавить значение переменной $a .
    Затем все значения этого массива преобразовать в строку, причём в случайном порядке.
     
  2. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    PHP:
    <?php

    shuffle
    ($array);
    $str implode($a$array).$a;
     
    LEXAlForpostl нравится это.
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Ещё один вопрос, не по этой теме, но чтобы нового топика не создавать.

    Если в переменной $text слово "word" встречается 10 раз, можно ли в случайном порядке заменить три из 10 упоменаний слова на $a1, $a2, $a3, соотвественно.
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    PHP:
    $str 'bbb bbb mmm nnn bbb bbb bbb bbb';
    $search 'bbb';
    $replace '1111';
    $pos = array();
    $lastpos strrpos($str$search);
    $pos[0] =  strpos($str$search0);
    $i 0;
    while (
    strpos($str$search$pos[$i-1] + 1) < $lastpos)
    {
        
    $i++;
        
    $pos[$i] = strpos($str$search$pos[$i-1] + 1);
    }
    shuffle($pos);
    if (
    sizeof($pos) == 6)
        {
            
    shuffle($pos);
            for (
    $i 0$i 3$i++)
                
    $str substr($str,0,$pos[$i]).$replace.substr($str,$pos[$i]+strlen($search),strlen($str));
        }
    в конце измененная строка хранится в $str. из 6 вхождений 3 заменено
     
    LEXAlForpostl нравится это.
  5. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    хм.. опередили, но все же:
    PHP:
    <?php
    $a1
    ="<b>Маша</b>";
    $a2="<b>Игорь</b>";
    $a3="<b>ОНО</b>";
    $array=array($a1,$a2,$a3);
    $str="vasya";
    $text="vasya ест булки vasya не моет уши vasya идет в кино vasya бегает быстро vasya дурак vasya поехал vasya не туда vasya раз-два-три vasya вверх ногами vasya 123";
    $col=substr_count($text,$str);
    $i=0;
    for(
    $q=0;$q<count($array);$q++){
        
    $num=rand(0,$col-1);
        
    $num_str=0;
        for(
    $w=0;$w<$col;$w++){
            
    $num_str=strpos($text,$str,$num_str+1);
            if(
    $w==$num){
                
    $text=substr_replace($text,$array[$i],$num_str,strlen($str));
                ++
    $i;
                --
    $col;
                break;
            }
        }
    }
    echo 
    $text;
    ?>
    без_проверки_на_10_вхождений_в_строке, но можно дописать
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    вложенные циклы не есь хорошо. первый вариант предпочтительнее по быстордействию
     
  7. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Без аргументации замечание не айс ;)
    другой вариант(без вложенных циклов :p:(
    PHP:
    <?php
    $array
    =array("маша","Игорь","ОНО");
    $str="vasya";
    $text="vasya ест булки vasya не моет уши vasya идет в кино vasya бегает быстро vasya дурак vasya поехал vasya не туда vasya раз-два-три vasya вверх ногами vasya 123";
    $text2=explode($str,$text);
    $text="";
    $col=count($text2);
    $arr=range(0,$col-2);
    shuffle($arr);
    $arr=array_slice($arr,0,count($array));
    $i=0;
    for(
    $q=0;$q<($col-1);$q++){
        if(
    in_array($q,$arr)){
            
    $text.=$text2[$q]."<b>".$array[$i]."</b>";
            ++
    $i;
        }else{
            
    $text.=$text2[$q].$str;
        }
    }
    $text.=$text2[$q];
    echo 
    $text;
    ?>
     
  8. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Тебе аргументировать то что можно сделать одним циклом, а ты делаешь двумя?
     
  9. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    ага, только в первом примере два цикла, while и for(а у меня вложенный цикл может и не дойти до конечного значения) и выдаются непонятные результаты, типа:
    и
    тем более у меня скрипт расчитан на автоматическое определение количества заменяемых слов, если заменить
    PHP:
    for($q=0;$q<count($array);$q++){
    на
    PHP:
    for($q=0;$q<3;$q++){
    то мой скрипт выполняется быстрее
     
  10. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Йеп, я сплоховал, не учел появление смещения при разных длинах слов) Работает правильно только при равной длинне искомого слова и слова-замены. А еще там один лишний shuffle, перед if.
     
Статус темы:
Закрыта.