PDA

View Full Version : سوال: قرار دادن یک رشته بصورت رندوم در متن ...



thacker
شنبه 17 آبان 1393, 16:10 عصر
سلام.
چطور میتونم یک رشته ( مثلا <a href="http://site.com">site</a> ) رو 5 بار توی قسمتهای یک متن بصورت رندوم چاپ کنم ؟
با تشکر

bagherok
شنبه 17 آبان 1393, 18:26 عصر
لطفا یکم بازتر کنید.
یا مثالی چیزی بذارید...

thacker
شنبه 17 آبان 1393, 19:05 عصر
یعنی مثلا یک متن به صورت زیر داریم :

متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن

حالا میخوام بصورت رندوم 5 بار تگ <a></a> رو بصورت رندوم روی بعضی از کلمات قرار بدم مثل زیر :

متن <a>متن</a> متن متن متن متن
متن متن متن متن <a>متن</a> متن
<a>متن</a> متن متن متن متن متن
متن متن متن <a>متن</a> متن متن
متن متن متن متن <a>متن</a> متن

bagherok
شنبه 17 آبان 1393, 21:45 عصر
$Context=
"متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن";

$rand_keys = range(0, 5);
shuffle($rand_keys);
$lines= explode("\r\n", $Context);

foreach($lines as $line){
$word=explode(" ",$line);
$rand_key=array_pop($rand_keys);
$word[$rand_key]="<a>$word[$rand_key]</a>";
@$out.=implode(" ",$word).PHP_EOL;
}
echo $out;

thacker
یک شنبه 18 آبان 1393, 00:15 صبح
با تشکر از شما ...
برنامه ای که شما نوشتید <a> رو فقط بین 5 کلمه اول قرار میده ... چطور میشه کاری کرد که این عمل 5 بار در تمام متن کاملا بصورت رندوم صورت بگیره ؟

bagherok
یک شنبه 18 آبان 1393, 10:00 صبح
با تشکر از شما ...
برنامه ای که شما نوشتید <a> رو فقط بین 5 کلمه اول قرار میده ... چطور میشه کاری کرد که این عمل 5 بار در تمام متن کاملا بصورت رندوم صورت بگیره ؟

<?php
$Context=
"متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن
متن متن متن متن متن متن";
$lines= explode("\r\n", $Context);
$rand_key_word = range(0, 5);
shuffle($rand_key_word);
$rand_key_line=(array_flip(array_rand($lines, 5)));
foreach($lines as $key=>$val){
if(isset($rand_key_line[$key])){
$words=explode(" ",$lines[$key]);
$key_word=array_pop($rand_key_word);
unset($rand_key_line[$key]);
$words[$key_word]='<strong>'.$words[$key_word].'</strong>';
@$out.=implode(" ",$words).PHP_EOL;
}
else
@$out.=$lines[$key].PHP_EOL;
}
echo $out;
?>

thacker
یک شنبه 18 آبان 1393, 13:11 عصر
پیغام خطای زیر رو میده :
Warning: array_rand() [function.array-rand (http://127.0.0.1/function.array-rand)]: Second argument has to be between 1 and the number of elements in the array in C:\Program Files (x86)\Ampps\www\4.php on line 81

bagherok
یک شنبه 18 آبان 1393, 13:30 عصر
پیغام خطای زیر رو میده :
Warning: array_rand() [function.array-rand (http://127.0.0.1/function.array-rand)]: Second argument has to be between 1 and the number of elements in the array in C:\Program Files (x86)\Ampps\www\4.php on line 81

خب فک میکنم به خاطر این باشه که متن شما کمتر از 5 خط باشه

count($lines);
نباید کمتر از 5 باشه

2undercover
یک شنبه 18 آبان 1393, 15:32 عصر
فکر نمی کنم به اون همه پیچیدگی نیازی باشه:


<?php $text = 'به نام خداوند جان خرد / کزین برتر اندیشه بر نگذرد';
$linksCount = 5; $words = explode(' ', $text); $wordIndexes = range(0, count($words) - 1); shuffle($wordIndexes); while ($linksCount > 0) { $words[$wordIndexes[$linksCount]] = '<a href="#">' . $words[$wordIndexes[$linksCount]] . '</a>';
--$linksCount; }
echo $text = implode(' ', $words);

bagherok
یک شنبه 18 آبان 1393, 16:32 عصر
خوبه.


new line ها چی؟

الان خروجی به همون شکل ورودی هست.
اگه متن ورودی تو چند خط باشه چی.

همین باعث میشه یکم پیچده تر بشه.

استارتر هم نگفته بودم که متن ورودی دقیقا به چه صورت هست.

bagherok
یک شنبه 18 آبان 1393, 17:23 عصر
پایین تر...

bagherok
یک شنبه 18 آبان 1393, 18:34 عصر
$context="متن متن متن
متن متن
متن
متن متن متن متن متن متن متن";
$count=5;
$words= preg_split('#\s|\r\n#', $context);
$rand_key_word = range(0, count($words) - 1);
shuffle($rand_key_word);
while($count>0){
while(1){
if(!empty($words[$end=array_pop($rand_key_word)])){
$words[$end]='<a href="#">' . $words[$end] . '</a>';$count--;break;
}
}
}
echo implode("",array_map(function($value) {return $value === "" ? "\r\n" : $value.' ';}, $words));

thacker
یک شنبه 18 آبان 1393, 19:27 عصر
با سپاس فراوان از شما دوستان :خجالت:
فقط اگه توی متن کد html باشه به مشکل میخوره ... میشه کدهای html رو توی این برنامه نادیده گرفت ؟! ولی لازمه که توی خروجی کدهای html فراخوانی بشه ...

bagherok
یک شنبه 18 آبان 1393, 19:58 عصر
با سپاس فراوان از شما دوستان :خجالت:
فقط اگه توی متن کد html باشه به مشکل میخوره ... میشه کدهای html رو توی این برنامه نادیده گرفت ؟! ولی لازمه که توی خروجی کدهای html فراخوانی بشه ...

ورودی و خروجی ای واقعی ونهایی که مد نظرتون هست رو اینجا قرار بدید...

رضا قربانی
یک شنبه 18 آبان 1393, 20:55 عصر
آقا من الآن کل پست ها رو خوندم و نمی دونم چی می خوایی تا بهت جواب بدم .

الآن ورودی شما چیه ؟ یه ورودی درست و درمون بنویس و خروجی که نیاز داری رو بگو تا راحت به جوابت برسی .
موفق باشید

thacker
یک شنبه 18 آبان 1393, 21:36 عصر
مثال برای ورودی :

به گزارش <a href="http://farsnews.ir">خبرگزاری فارس</a> به نقل از روابط عمومی سیزدهمین جشنواره بین‌المللی فیلم <strong>مقاومت</strong>،این نشست با حضور روح الله شمقدری «تهیه کننده»، داوود بیدل «کارگردان» و با حضور بازیگران این فیلم: همایون ارشادی، حسن جوهرچی، سحر قریشی و شهرزاد کمالزاده در <strong>سینما فلسطین</strong> برگزار شد.

مثال برای خروجی :

به گزارش <a href="http://farsnews.ir">خبرگزاری فارس</a> به نقل از <"a href="http://mysite.com>روابط</a> عمومی سیزدهمین <a href="http://mysite.com">جشنواره</a> بین‌المللی فیلم <strong>مقاومت</strong>،این نشست با <a href="http://mysite.com">حضور</a> روح الله شمقدری «تهیه کننده»، داوود بیدل «کارگردان» و با حضور بازیگران این فیلم: همایون <a href="http://mysite.com">ارشادی</a>، حسن جوهرچی، <a href="http://mysite.com">سحر</a> قریشی و شهرزاد کمالزاده در <strong>سینما فلسطین</strong> برگزار شد.

رضا قربانی
یک شنبه 18 آبان 1393, 22:47 عصر
خب این چیزی که من دیدم کار یه ادیتوره :متفکر:
به نظر من وقت خودت رو نگیر و دنبال ادیتور tiny یا ادیتور های دیگه بگرد . حتی خودتم می تونی یه ادیتور ساده و دستی با js html بنویسی که ساده و فقط محدود به تگ های خودتون باشه .
موقع درج محصول یا هر چی تغییرات لازم رو بر روی پست انجام بدید و در بانک اطلاعاتی ذخیره کنید .

البته با php هم میشه به صورت رندوم که می گید این کار رو انجام بدید ، ولی اصلا منطقی نیست . با توابع php اول می تونیم تگ های ورودی رو حذف کنیم و با رگولار اکسپرشن می تونیم کلمات فارسی ورودی رو بگیریم و بعد می تونیم با تابع explod کلمات رو بعد از هر خط فاصله به آرایه تبدیل کنیم و به صورت رندوم چند تا آرایه (همون کلمه) رو بندازیم داخل تگ .
ولی چرا ... ؟

رضا قربانی
یک شنبه 18 آبان 1393, 23:06 عصر
الآن که با دقت بیشتری نگاه کردم فهمیدم که برای سئو داری این کار رو انجام میدید در صورتی که این کار اشتباه هست و هیچ تاثیری در سئو سایت شما ندارد ، شما با این کار جدا از اینکه هیچ امتیازی به سایتتون نمیدید بلکه امتیاز منفی در گوگل می خورید و این اصلا درست نیست .

در صورتی امتیاز میدید و میگیرید که این تگ لینک ، از سایت شما به سایت دیگری (دامنه سایت مقصد External link) باشه و از سایت مقصد حداقل یک لینک به سایت شما داده باشه . در این صورت امتیاز می گیرید و پیج رنک سایت دو طرف میکشه بالا . همین قانون رو روی چندین سایت تکرار کنید و بعد خودتون نتیجه رو می بینید .

thacker
یک شنبه 18 آبان 1393, 23:26 عصر
خیر برای سئو نیست ... تقریبا یه جورایی برای کپی رایت هست ...