PDA

View Full Version : سوال: مشکل در تکراری شدن فیلدهای آرایه برای سبد خرید



Alias.Boy
سه شنبه 19 آذر 1392, 23:10 عصر
سلام
من فروشگاهی دارم ایجاد میکنم که محصولات این فروشگاه در رنگ‌ها و انواع مختلف اراپه میشه
برای اینکه کاربر بتواند چند رنگ مختلف از یک محصول را خریداری کند مجبور هستم از کلیدی استنفاده کنم که در هر بار اضافه شدن یک محصول جدید به آرایه تغییر کند
اگر از ID محصول به عنوان کلید استفاده کنم اطلاعات روی خانه‌های آن کلید نوشته میشود ، چون همانطور که میدانید در آرایه نمیتوان کلید تکراری داشت

همه چیز به درستی انجام میشه و فقط مشکلی که من دارم با این کدی که نوشتم این هست که در هر بار ایجاد شدن ردیفی از آرایه بعد از بسته شدن و دوباره لود شدن صفحه مقدار قبلی دوباره در آرایه نوشته میشود

بخش اضافه کردن اطلاعات به سبد خرید


<?php

if(isset($_SESSION['basket'])){
$key = end((array_keys($_SESSION['basket'])));
$key++;
}else{
$key = 0;
echo " count = 0";
}

if(isset($_GET['id'] , $_GET['meter'] , $_GET['color'])){
$id = $_GET['id'];

$color = $_GET['color'];

$meter = $_GET['meter'];

$selected_product = array($id , $color , $meter);

list($_SESSION['basket'][$key][0] , $_SESSION['basket'][$key][1] , $_SESSION['basket'][$key][2] ) = $selected_product;

echo "<pre>";
var_dump($_SESSION['basket']);
echo "</pre>";
$count = count($_SESSION['basket']);
echo " count = ".$count;
}


?>
نمونه خروجی آرایه:



array(3) {
[0]=>
array(3) {
[2]=>
string(4) "5544"
[1]=>
string(6) "سبز"
[0]=>
string(2) "11"
}
[1]=>
array(3) {
[2]=>
string(4) "5544"
[1]=>
string(6) "سبز"
[0]=>
string(2) "11"
}
[2]=>
array(3) {
[2]=>
string(4) "4234"
[1]=>
string(8) "سفید"
[0]=>
string(1) "9"
}
}


همانطور که میبیند مقدارهای خانه‌های آرایه‌ با کلید 0 و 1 یکسان میباشند و این مقدارها ناخواسته ایجاد میشوند

از تابع array_unique هم برای اینکار استفاده کردم ولی جواب نداد

پیشاپیش از کمکتون ممنونم

Alias.Boy
چهارشنبه 20 آذر 1392, 09:42 صبح
دوستان اگر سوالم توضیح بیشتری نیاز دارد بفرمایید تا توضیح بدهم
هر چند با نگاه کردن به کد و توضیحات بالا و خروجی متوجه منظورم میشوید

Alias.Boy
چهارشنبه 20 آذر 1392, 20:48 عصر
ممنون از چند نفری که حداقل مشاهده کردن :|

nadi_1368
چهارشنبه 20 آذر 1392, 21:16 عصر
به نظر ک مشکلی نداره

شاید از بخش دیگری از کد باشه

Alias.Boy
چهارشنبه 20 آذر 1392, 22:08 عصر
به نظر ک مشکلی نداره

شاید از بخش دیگری از کد باشه

مرسی از شما
باید بگم که نه از جای دیگه کد نیست , تو این صفحه فقط این بخش کد اجرا میشه
همونطور که گفتم این مشکل به خاطر اینه که کلیدی که از طریق key$ در هر بار از اضافه شدن محصول به سبد ایجاد میشه این مشکل را به بار میاره , انگاری تابع لیست وقتی میبینه کلید جدیدی هست مقدار آخری را دوباره در آرایه مینویسه و یک بار دیگه اجرا میشه و مقدار جدید را اضافه میکنه

شما میتوانید این قضیه را با یک ورودی از داخل یک فرم که اطلاعات فرم را به صورت GET ارسال میشود را برای این مشکل تست کنید

باز هم ممنون میشم کمک کنید این مشکل را برطرف بکنم
یا اگر راه خل دیگه ای سراغ دارید بگید

nadi_1368
چهارشنبه 20 آذر 1392, 22:36 عصر
اینو یک نگاه بندازین ببینید مشکلتون حل نمیشه

http://v3.thewatchmakerproject.com/journal/276/

در لینک بالا به این روش عمل میکنه ک فقط ای دی هه رو در session ذخیره میکه(ای دا ها کارکتر ، از هم جدا میکنه)
و موقع ک میخواد مورد برسی قرار بده از با استفاده از دستور


$items = explode(',',$_SESSION['cart']);

حالا شما ک ب غیر از ای دی دو فیلد دیگر هم دارید میتونید به این شکل عمل کنید


$_SESSION['cart']=$id.'_'.$meter."_".$color.',';//item1
$_SESSION['cart']=$id.'_'.$meter."_".$color.',';//item2
$_SESSION['cart']=$id.'_'.$meter."_".$color;//item3

$items = explode(',',$_SESSION['cart']);
foreach ($items as $item) {
list($id,$meter,$color)=explode('_',$item);
}


فک کنم باید درست کار کنه:چشمک: