PDA

View Full Version : ایجاد رشته کارکتر



novinsite
دوشنبه 16 بهمن 1391, 20:56 عصر
با سلام و احترام
من یدونه کد لازم دارم که حروف از a تا z (حروف کوچک) را با ترکیب های مختلف برام نشون بده
این ترکیب از 3 کارکتر شروع بشه و تا 20 کارکتر ادامه داشته باشه
برای مثال
رشته اول: aaa
رشته دوم: aab
رشته سوم: aac
و تا آخر

2undercover
سه شنبه 17 بهمن 1391, 14:43 عصر
باید از حلقه for تو در تو استفاده کنید:


$character=array('a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q','r','s','t','u' ,'v','w','x','y','z');
for($ch1=1;$ch<=26;$ch1++)
{//End $ch1 For loop
echo $caracter[$ch1];
for($ch2=1;$ch2<=26;$ch2++)
{//End $ch2 For loop
echo $caracter[$ch2];
for($ch3=1;$ch3<=26;$ch3++)
{//End $ch3 For loop
echo $caracter[$ch3];
}//End $ch3 For loop
}//End $ch2 For loop
}//End $ch1 For loop

novinsite
سه شنبه 17 بهمن 1391, 20:59 عصر
باید از حلقه for تو در تو استفاده کنید:


$character=array('a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q','r','s','t','u' ,'v','w','x','y','z');
for($ch1=1;$ch<=26;$ch1++)
{//End $ch1 For loop
echo $caracter[$ch1];
for($ch2=1;$ch2<=26;$ch2++)
{//End $ch2 For loop
echo $caracter[$ch2];
for($ch3=1;$ch3<=26;$ch3++)
{//End $ch3 For loop
echo $caracter[$ch3];
}//End $ch3 For loop
}//End $ch2 For loop
}//End $ch1 For loop


با سلام و تشکر
این کدها روی سرور اجرا نمیشه و خطای timeout میده
چکار میتونم بکنم که اجرای اسکریپت سریع باشه؟

2undercover
چهارشنبه 18 بهمن 1391, 16:02 عصر
با سلام و تشکر
این کدها روی سرور اجرا نمیشه و خطای timeout میده
چکار میتونم بکنم که اجرای اسکریپت سریع باشه؟

فک نمی کنم سریع تر از این بشه کاری کرد وتنها راه افزایش زمان timeout هست!

آخه این عمل خیلی زمان بره و من حتی روی local هم نتونستم اجراش کنم!

novinsite
چهارشنبه 18 بهمن 1391, 16:39 عصر
فک نمی کنم سریع تر از این بشه کاری کرد وتنها راه افزایش زمان timeout هست!

آخه این عمل خیلی زمان بره و من حتی روی local هم نتونستم اجراش کنم!

با دستور for اجرا نمیشه ولی با دستور foreach به راحتی اجرا میشه
ولی من نمی تونم خروجی مناسب ازش بگیرم

Tarragon
چهارشنبه 18 بهمن 1391, 16:57 عصر
این کد تست شده.

<?php
$character=array('a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q','r','s','t','u' ,'v','w','x','y','z');
foreach($character as $key1 => $value1)
{
foreach($character as $key2 => $value2)
{
foreach($character as $key3 => $value3)
{
echo $character[$key1].$character[$key2].$character[$key3].'<br>';
}
}
}

novinsite
چهارشنبه 18 بهمن 1391, 17:29 عصر
این کد تست شده.

<?php
$character=array('a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q','r','s','t','u' ,'v','w','x','y','z');
foreach($character as $key1 => $value1)
{
foreach($character as $key2 => $value2)
{
foreach($character as $key3 => $value3)
{
echo $character[$key1].$character[$key2].$character[$key3].'<br>';
}
}
}

با تشکر
برای اینکه به بیشتر از 3 کارکتر دسترسی داشته باشیم باید تعداد حلقه ها را بیشتر کنیم یا راه دیگری هم وجود دارد؟

2undercover
چهارشنبه 18 بهمن 1391, 18:18 عصر
با تشکر
برای اینکه به بیشتر از 3 کارکتر دسترسی داشته باشیم باید تعداد حلقه ها را بیشتر کنیم یا راه دیگری هم وجود دارد؟

بله! به هر تعداد کاراکتر که می خواید دسترسی داشته باشید یک حلقه ی دیگه ایجاد کنید!

منم بدون foreach با همون for درستش کرد البته ساختارش مثله همون foreach هستش وتفاومت زیادی در سرعت ندارن!


<?php
$character=array('a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q','r','s','t','u' ,'v','w','x','y','z');
for($ch1=0;$ch1<=26;$ch1++)
{
for($ch2=0;$ch2<=26;$ch2++)
{
for($ch3=0;$ch3<=26;$ch3++)
{
echo $character[$ch1].$character[$ch2].$character[$ch3].'<p>';
}
}
}
?>

MinusOne
چهارشنبه 18 بهمن 1391, 18:55 عصر
نیازی نیست به تعداد 20 تا for ایجاد شه ! کدی که نوشتم فکر کنم کار کنم (اگه ایرادی داشت ببخشید بدجوری خستم.) ولی کلا این کد کدیه که خیلی اجراش زمان بره . (2undercover جان شرمنده از کدی که شما زدی استفاده کردم.)

<?php
$Numbers = array();
$_Numbers = array();
for($i = 3; $i<=20; $i++)
{
$_Numbers[$i] = array();
}
$Characters=array('a','b','c','d','e','f','g','h', 'i','j','k','l','m','n','o','p','q','r','s','t','u ' ,'v','w','x','y','z');
for($ch1=0;$ch1<26;$ch1++)
{
for($ch2=0;$ch2<26;$ch2++)
{
for($ch3=0;$ch3<26;$ch3++)
{
$_Numbers[3][] = $Characters[$ch1].$Characters[$ch2].$Characters[$ch3];
}
}
}
for($i = 4; $i <= 20; $i++)
{
for($j = 0; $j < count($_Numbers[$i-1]); $j++)
{
for($z = 0; $z < 26; $z++)
{
$_Numbers[$i][] = $_Numbers[$i-1].$Characters[$z];
}
}
}
foreach($_Numbers as $NumberArray)
{
$Numbers = array_merge($Numbers, $NumberArray);
}
?>

البته کاملا معلومه که سرور نمیزاره این کد اجرا بشه یا به علت timeout یا به علت اشغال فضای زیاد حافظه. هدف ارائه الگوریتم بود.

Tarragon
چهارشنبه 18 بهمن 1391, 20:55 عصر
کدی من نوشتم خلاصه تر نیست؟

MinusOne
پنج شنبه 19 بهمن 1391, 02:34 صبح
کد شما با کدی که 2undercover گفت تفاوتی نداره ، و برای گشتن در آرایه ها استفاده از foreach مرسوم تره . کدی که من نوشتم همه ی رشته های 3 تا 20 حرفی رو با کاراکتر های انگلیسی تولید میکنه.

novinsite
دوشنبه 07 مرداد 1392, 16:50 عصر
با سلام
دوستان بنده از کد زیر استفاده میکنم ولی این کد یه مشکل داره و اون هم این هست که یک رشته رو چند بار ایجاد میکنه
مثلا رشته aaaac رو چند بار (حدود بیست سی بار) ایجاد میکنه
این مشکلو چطوری میشه رفع کرد؟



<?php
$character=array('a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q','r','s','t','u' ,'v','w','x','y','z');
foreach($character as $key1 => $value1)
{
foreach($character as $key2 => $value2)
{
foreach($character as $key3 => $value3)
{
foreach($character as $key4 => $value4)
{
foreach($character as $key5 => $value5)
{
$random = $character[$key1].$character[$key2].$character[$key3].$character[$key4].$character[$key5];
echo $random;
echo "<br>";
}
}
}
}
}
?>

MMSHFE
دوشنبه 07 مرداد 1392, 21:37 عصر
این کد رو ببینید:


<?php

/**
* @author M-L-F
* @copyright 2013
*/

set_time_limit(0);

function Combine($length, $pos = 0, $out = '') {
global $alphabet;
for($i = 0; $i < count($alphabet); $i++) {
if($pos < $length) {
Combine($length, $pos + 1, $out . $alphabet[$i]);
}
}
if(strlen($out) == $length) {
echo $out . '<br />' . PHP_EOL;
}
}
$alphabet = range('a', 'z');

for($i = 3; $i <= 20; $i++) {
echo '<p style="border: solid 1px #000; border-radius: 5px; padding: 5px;">Length: ' . $i . '<br />';
Combine($i);
echo '</p>' . PHP_EOL;
}
?>