PDA

View Full Version : چگونه مقادیر یک آرایه را غیر قابل تغییر کنیم؟؟؟



Salazar.mi
سه شنبه 30 مهر 1398, 13:12 عصر
سلام
اینجا اومدم $db را ساختم
که نشان میده برای هر خانه سطر بعد و ستون بعدیش چه مقداری داره
الان مشکل اینجاست که $dataتحت تاثیر $db قرار گرفته یعنی
بعد از تعریف $db از $data که استفاده میکنم همون $db را برام چاپ میکنه
ولی من میخوام از $data بعد از تعریف $db با همون مقدار اولش استفاده کنم
خواهشاااا کمکمممممممم کنید


<?php
for($j=1;$j<9;$j++)
{

?>
<tr>
<?php
for($i=1;$i<9;$i++)
{
?>
<td>
<?php
$data=$a['sotoon'.$i]["kh".$j];

//echo $data;


switch($data)
{
case 0:
//echo $data;
//echo '<img src="assets/image/aaaa.png" class="khali">';
break;


case 1:
//echo $data;
echo '<span class="fi icon-circle m_blue"></span>';
break;


case 2:
//echo $data;
echo '<span class="fi icon-circle m_red"></span>';
break;


case 3:
//echo $data;
echo '<span class="fi icon-circle m_ki_blue"></span>';
break;


case 4:
//echo $data;
echo '<span class="fi icon-circle m_ki_red"></span>';
break;


case 5:
//echo $data;
echo '<span class="por"></span>';
break;

default:
echo "";
}


if(($i+1)>=9)
{
continue;
}
elseif(($j+1)>=9)
{
continue;
}



$db=$a['sotoon'.($i+1)]["kh".($j+1)];

?>

</td>

<?php
}
?>
</tr>

<?php
}


?>




</table>

Salazar.mi
سه شنبه 30 مهر 1398, 14:14 عصر
حقیقتا من یه راه حل براش پیدا کردم ولی نمیدونم چجوری بنویسمش
اول اینکه دقیقا مثل همین کار را باید برای سطر بعد و ستون قبل هم انجام بدم
من گفتم
اول بیایم یه شرطی را بزاریم مثلا 1=$p و تا زمانی که این شرط برقرار باشد بیاد تو آرایه a دنبال خانه های سطر بعد و ستون بعدش باشه و جواب ها را بریزه داخل یه آرایه دیگه یا یک متغیر دیگه
بعد بگیم حالا دیگه شرط 0=$p برقرار نباشد
برای سطر بعد و ستون بعدم همینکارو کنیم
میشه آیا؟؟؟؟؟؟؟؟؟؟
یعنی امکانش هست که اگر $data را خارج از شرط p چاپ کنیم همان $data اولیه باشه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
حقیقتا من با دستورwhile اصلا رابطه خوبی ندارم هرچه کردم نشد که نشد

Salazar.mi
سه شنبه 30 مهر 1398, 17:04 عصر
<?php
$a=array(


"sotoon1"=>array(
"kh1"=>5,
"kh2"=>2,
"kh3"=>5,
"kh4"=>0,
"kh5"=>5,
"kh6"=>1,
"kh7"=>5,
"kh8"=>1,
),

"sotoon2"=>array(
"kh1"=>2,
"kh2"=>5,
"kh3"=>2,
"kh4"=>5,
"kh5"=>0,
"kh6"=>5,
"kh7"=>1,
"kh8"=>5,
),

"sotoon3"=>array(
"kh1"=>5,
"kh2"=>2,
"kh3"=>5,
"kh4"=>0,
"kh5"=>5,
"kh6"=>1,
"kh7"=>5,
"kh8"=>1,
),

"sotoon4"=>array(
"kh1"=>2,
"kh2"=>5,
"kh3"=>2,
"kh4"=>5,
"kh5"=>0,
"kh6"=>5,
"kh7"=>1,
"kh8"=>5,
),

"sotoon5"=>array(
"kh1"=>5,
"kh2"=>2,
"kh3"=>5,
"kh4"=>0,
"kh5"=>5,
"kh6"=>1,
"kh7"=>5,
"kh8"=>1,
),

"sotoon6"=>array(
"kh1"=>2,
"kh2"=>5,
"kh3"=>2,
"kh4"=>5,
"kh5"=>0,
"kh6"=>5,
"kh7"=>1,
"kh8"=>5,
),

"sotoon7"=>array(
"kh1"=>5,
"kh2"=>2,
"kh3"=>5,
"kh4"=>0,
"kh5"=>5,
"kh6"=>1,
"kh7"=>5,
"kh8"=>1,
),

"sotoon8"=>array(
"kh1"=>2,
"kh2"=>5,
"kh3"=>2,
"kh4"=>5,
"kh5"=>0,
"kh6"=>5,
"kh7"=>1,
"kh8"=>5,
),

);


?>



برای بازی چکرز هست
$data میاد میگه هر خونه از آرایه که در ظاهر مثل یک جدول یه عدد داره
و هر عدد نشان میده که تو اون خانه چه حالتی
مثلا اگر صفر میشه خانه خالی
اگر یک مهره آبی
و
...
حالا من اومدم میگم $db متغیری باشه که نشان بده هر کدوم از خانه ها, خانه سطر بعد و ستون بعدش محتواش چیه مثلا صفر و یگ و ...

اینکارو با تعریف $db بعد از switch انجام دادم
منتهی چون برای تعریف $db اومدم از خود $a که میشه آرایه اصلیمون استفاده کردم
باعث شده مقدارها در آرایه اصلی تغییر کنه
یا نمیدونم چی شده
که وقتی بعد از تعریف $db هر چی $data که نشان دهده همان آرایه اصلی هست را صدا میزنم برام db چاپ میکنه
یه جوراای انگار با تعرف db دیگه آرایه اصلیم مقادیرش به db تغییر کرده
دنبال راه حلی هستم که بشه این مقادیر جدید db را درون یک آرایه دیگه بریزم
طوری که آرایه اصلی تغییر نکند

ali_sed
چهارشنبه 01 آبان 1398, 01:01 صبح
سلام

خب مطابق دیتای ارائه شده مثلا a11 برابر 5 است همینطور a22 برابر 5 است. مقادیر منحصر به فرد داخل آرایه تعریف کنید بعد تست کنید تا متوجه اشتباهات احتمالی شوید.

Salazar.mi
چهارشنبه 01 آبان 1398, 13:40 عصر
سلام

خب مطابق دیتای ارائه شده مثلا a11 برابر 5 است همینطور a22 برابر 5 است. مقادیر منحصر به فرد داخل آرایه تعریف کنید بعد تست کنید تا متوجه اشتباهات احتمالی شوید.

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





if(($i+1)>=9)
{
continue;
}
elseif(($j+1)>=9)
{
continue;
}


$db=$a['sotoon'.($i+1)]["kh".($j+1)];


اما الان اتفاقی که میفته اینه
که db روی متغیر data که تو خط 13 نوشتم تاثیر میذاره
و باعث میشه وقتی بعد از تعریف db میام متغیر data را چاپ میکنم به جای dataبرام db را چاپ میکنه
میخوام این دوتا روی هم تاثیر نگذارند:گریه::گریه::گریه::گر ه:

ali_sed
چهارشنبه 01 آبان 1398, 20:45 عصر
شما $a را ابتدای حلقه تعریف کرده اید و $db را انتهای حلقه.
به ترتیب مقادیر زیر را داریم


$j = 1;
$i = 1;
$data = $a[sotoon1][kh1];//5
$db = [$a[sotoon2][kh2]; //5

حالا حلقه داخلی مقدار i را یک واحد اضافه می کند
$i = 2;
data = $a['sotoon2']['kh1'];//2
$db = $a['sotoon3']['kh2'];//2

حالا حلقه داخلی مقدار i را یک واحد دیگر اضافه می کند
$i = 3;
...


می توانید تا چند شماره دیگه هم ادامه دهید. خب دیگه شما خودتان باید متوجه ایراد کارتان شده باشید. دقت کنید که db و data آرایه نیستند تنها یک متغییر موقت برای نگهداری اطلاعات یک عنصر از آرایه a می باشند. (با توجه به اینکه جایی گفتید که میخوام data یک آرایه باشد)

اگر موفق به رفع مشکل نشدید بگید برنامه قراره چیکار کنه تا بهتر راهنمایی شوید.

Salazar.mi
پنج شنبه 02 آبان 1398, 16:30 عصر
شما $a را ابتدای حلقه تعریف کرده اید و $db را انتهای حلقه.
به ترتیب مقادیر زیر را داریم


$j = 1;
$i = 1;
$data = $a[sotoon1][kh1];//5
$db = [$a[sotoon2][kh2]; //5

حالا حلقه داخلی مقدار i را یک واحد اضافه می کند
$i = 2;
data = $a['sotoon2']['kh1'];//2
$db = $a['sotoon3']['kh2'];//2

حالا حلقه داخلی مقدار i را یک واحد دیگر اضافه می کند
$i = 3;
...


می توانید تا چند شماره دیگه هم ادامه دهید. خب دیگه شما خودتان باید متوجه ایراد کارتان شده باشید. دقت کنید که db و data آرایه نیستند تنها یک متغییر موقت برای نگهداری اطلاعات یک عنصر از آرایه a می باشند. (با توجه به اینکه جایی گفتید که میخوام data یک آرایه باشد)

اگر موفق به رفع مشکل نشدید بگید برنامه قراره چیکار کنه تا بهتر راهنمایی شوید.

بی نهایت ممنونم که جواب دادین
من این مدلی حلش کردم
حقیقتا خودمم نفهمیدم چیکار کردم
فقط همونجور که گفتم یه جورایی با while اومدم محدوده data را با db و dg تغییر دادم
این برای بازی چکرز
میخواستم بگم اگر خونه ای مقدار dataاش برابر 2 بود(حاوی مهره قرمز) و db که همون خونه سطر بعد و ستون بعد مقدارش 0 بود(خانه خالی هست)
بشه drag
اگر خونه ای خودش 0بود (یعنی خالی بود) و خونه سطر قبل و ستون قبلشdg= 2 بود (یعنیمهره قرمز بود) بشه drop
ولی اینارو که تعریف میکردم مقداراشون قاتی میشد
data مشد db
db میشد dg
اعصابم خرد میشد
ولی الان فعلا که درست شده
بازم ممنونمممم که جواب دادین
تشگر




<?php
for($j=1;$j<9;$j++)
{

?>
<tr>
<?php
for($i=1;$i<9;$i++)
{
?>
<td>
<?php
$data=$a['sotoon'.$i]["kh".$j];

//echo $data;




switch($data)
{
case 0:
//echo $data;
//echo '<img src="assets/image/aaaa.png" class="khali">';
break;


case 1:
//echo $data;
echo '<span class="fi icon-circle m_blue"></span>';
break;


case 2:
//echo $data;
echo '<span class="fi icon-circle m_red"></span>';
break;


case 3:
//echo $data;
echo '<span class="fi icon-circle m_ki_blue"></span>';
break;


case 4:
//echo $data;
echo '<span class="fi icon-circle m_ki_red"></span>';
break;


case 5:
//echo $data;
echo '<span class="por"></span>';
break;

default:
echo "";
}

$k=1;
while($k>0)
{
$k--;
if(($i+1)>=9)
{
$db=6;
continue;
}

elseif(($j+1)>=9)
{
$db=6;
continue;
}

$db=$a['sotoon'.($i+1)]["kh".($j+1)];
//echo $db;
}


$kk=1;
while($kk>0)
{
$kk--;
if(($i-1)<=0)
{
$dg=6;
continue;
}


elseif(($j-1)<=0)
{
$dg=6;
continue;
}


$dg=$a['sotoon'.($i-1)]["kh".($j-1)];
//echo $dg;
}



//echo $db;
//echo $dg;

//echo $data;
//for red
if($db===0 & $data===2)
{
echo '<span class="dragred"></span>';
echo "drag";
}
if($dg===2 & $data===0)
{
echo '<span class="dropred"><img src="assets/image/aaaa.png" class="khali"></span>';
echo "drop";
}

?>

</td>

<?php
}
?>
</tr>

<?php
}


?>

ali_sed
جمعه 03 آبان 1398, 18:09 عصر
خواهش می کنم.