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

Статус
В этой теме нельзя размещать новые ответы.

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Имеем массив $array[1..n]
Надо в каждый элемент массива добавить значение переменной $a .
Затем все значения этого массива преобразовать в строку, причём в случайном порядке.
 
PHP:
<?php

shuffle($array);
$str = implode($a, $array).$a;
 
Ещё один вопрос, не по этой теме, но чтобы нового топика не создавать.

Если в переменной $text слово "word" встречается 10 раз, можно ли в случайном порядке заменить три из 10 упоменаний слова на $a1, $a2, $a3, соотвественно.
 
PHP:
$str = 'bbb bbb mmm nnn bbb bbb bbb bbb';
$search = 'bbb';
$replace = '1111';
$pos = array();
$lastpos = strrpos($str, $search);
$pos[0] =  strpos($str, $search, 0);
$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 заменено
 
хм.. опередили, но все же:
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_вхождений_в_строке, но можно дописать
 
вложенные циклы не есь хорошо. первый вариант предпочтительнее по быстордействию
 
вложенные циклы не есь хорошо. первый вариант предпочтительнее по быстордействию
Без аргументации замечание не айс ;)
другой вариант(без вложенных циклов :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;
?>
 
Тебе аргументировать то что можно сделать одним циклом, а ты делаешь двумя?
 
Тебе аргументировать то что можно сделать одним циклом, а ты делаешь двумя?
ага, только в первом примере два цикла, while и for(а у меня вложенный цикл может и не дойти до конечного значения) и выдаются непонятные результаты, типа:
1111 bbb mmm nnn1111b bbb1111b bbb
и
bbb 1111 mmm nnn bbb1111b bb1111bb
тем более у меня скрипт расчитан на автоматическое определение количества заменяемых слов, если заменить
PHP:
for($q=0;$q<count($array);$q++){
на
PHP:
for($q=0;$q<3;$q++){
то мой скрипт выполняется быстрее
 
Йеп, я сплоховал, не учел появление смещения при разных длинах слов) Работает правильно только при равной длинне искомого слова и слова-замены. А еще там один лишний shuffle, перед if.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху