PDA

View Full Version : چک کردن مقدار آرایه



develop.bigg
یک شنبه 14 اردیبهشت 1393, 19:53 عصر
با سلام و خسته نباشید

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

من توی این بخش فقط با آرایه $pic_num کار دارم ، میخوام کاری کنم که عددی که توشه چک بشه که آرایه تکراری اضافه نشه .

اینم تیکه ای کد ها :


for($counter = 0; $counter < 6;$counter++){
$catsel = array_rand($catidx,1); //$catsel = [0] or [1] or [etc]
$catselx = $catidx[$catsel]; //45 47 25

$covers = mysql_query("SELECT * FROM covers WHERE catid REGEXP '(^|,)$catselx(,|$)' AND id != $id ORDER BY RAND() LIMIT 1") or die (mysql_error());
$coverrows = mysql_fetch_array($covers);
$pic_num = array();

if(!in_array($coverrows['id'],$pic_num)){
$pic_num = array($counter=>$coverrows['id']);

foreach($pic_num as $key => $val)
echo "$key => $val <br>";

}
else {
echo "OK<br>";
$counter--;
continue;

}

while ($coverrow = mysql_fetch_array($covers)){
$cname = $coverrow['title'];
$iname = $coverrow['picture'];
$picid = $coverrow['id'];
$clink = preg_replace("![^a-z0-9]+!i", "-", $cname);
$clink = strtolower($clink);
$timg = preg_replace("[.jpg]", "", $iname);
if ($coverrow['lang'] == "en") $timage = "/en"; else $timage = "";
?>

<div class="tbcover"><a href="/cover-<?php echo $picid;?>-<?php echo $clink;?>.html"><img class="cover-thumb" src="uploads<?php echo $timage; ?>/thumb/<?php echo $timg;?>_t.jpg" width="180" height="67" alt="<?php echo $coverrow['title'];?> name"></a></div>

<?php
} }
?>

cpuram
یک شنبه 14 اردیبهشت 1393, 21:32 عصر
فکر کنم مشکلت از اینجاست چرا دوباره داری پیمایش میکنی؟

while ($coverrow = mysql_fetch_array($covers)){ $cname = $coverrow['title']; $iname = $coverrow['picture']; $picid = $coverrow['id']; $clink = preg_replace("![^a-z0-9]+!i", "-", $cname); $clink = strtolower($clink); $timg = preg_replace("[.jpg]", "", $iname); if ($coverrow['lang'] == "en") $timage = "/en"; else $timage = "";

develop.bigg
یک شنبه 14 اردیبهشت 1393, 22:05 عصر
نه اصلا اون در این مرحله اجرا نمیشه ، فقط قسمت بالایی داره اجرا میشه. خروجی که چاپ میشه اینطوریه :

0 => 194
1 => 190
2 => 191
3 => 195
4 => 194
5 => 177
الان این دوتا تکراری هست ، یعنی باید آرایه 4 نباشه ولی الان هست.

cpuram
یک شنبه 14 اردیبهشت 1393, 22:52 عصر
نه اصلا اون در این مرحله اجرا نمیشه ، فقط قسمت بالایی داره اجرا میشه. خروجی که چاپ میشه اینطوریه :

0 => 194
1 => 190
2 => 191
3 => 195
4 => 194
5 => 177
الان این دوتا تکراری هست ، یعنی باید آرایه 4 نباشه ولی الان هست.
مگه میشه؟ بعد از آکلاد else آکلاد for بسته نشده.

سوداگر
دوشنبه 15 اردیبهشت 1393, 02:31 صبح
چرا از متد array_unique استفاده نمی کنید؟

aalmair
دوشنبه 15 اردیبهشت 1393, 08:29 صبح
مشکل از قسمت




if(!in_array($coverrows['id'],$pic_num)){
$pic_num = array($counter=>$coverrows['id']);





کد اصلاح شده





if(!in_array($coverrows[$counter]['id'],$pic_num)){
$pic_num = array($counter=>$coverrows['id']);

develop.bigg
دوشنبه 15 اردیبهشت 1393, 09:06 صبح
با کمک دوستان و زحمات شبانه روزی بالاخره به کدهای زیر دست یافتیم.. از همه دوستانی که کمک کردند تشکر می کنم.



$array = array ($counter=>$coverrows['id']);
$unique = array();

foreach($array as $v){
isset($k[$v]) || ($k[$v]=1) && $unique[] = $v;
}

foreach($unique as $val){
echo "$val<br>";
}