Помогите разобраться с массивами

FRIE

Новичок
Помогите разобраться с массивами

Тема снова открыта. я не гадал а лишь предположил, сижу вот разбираюсь не удаляйте пожалуйста а то я сам никак не разберусь
 

dimagolov

Новичок
FRIE, у тебя одна попытка ответить правильно на мой вопрос. Иначе и RO заработать можешь.
 

FRIE

Новичок
Автор оригинала: dimagolov
FRIE, у тебя одна попытка ответить правильно на мой вопрос. Иначе и RO заработать можешь.
FRIE, переведи что значит "Parse error: syntax error, unexpected T_FOREACH"
Так .. в этом коде наскоко я понял

PHP:
<?php ini_set('display_errors', 'on');
error_reporting(E_ALL);
session_start();
$id=$_POST['id'];
$price=$_POST['price'];
$arr=array("id" =>$id, "price" => $price);
$result=array_merge($_SESSION['cart'],$arr)


foreach($result as $k => $v) {
    print "\$result[$k] => $v.\n";
}


?>
я не поставил ";" в 7 строке и
$_SESSION['cart'] не является массивом а я его прогоняю ф-цией для массивов, отсюда и неожиданный результат
 

dimagolov

Новичок
просто не поставил ";" в 7 строке. поэтому интерпретатор и не ожидал foreach (unexpected T_FOREACH) после этого.

про $_SESSION['cart'] тоже справедливо.
 

FRIE

Новичок
Автор оригинала: dimagolov
просто не поставил ";" в 7 строке. поэтому интерпретатор и не ожидал foreach (unexpected T_FOREACH) после этого.

про $_SESSION['cart'] тоже справедливо.
вот по другому сделал
PHP:
<?php ini_set('display_errors', 'on');
error_reporting(E_ALL);
session_start();
$id=$_POST['id'];
$price=$_POST['price'];
$arr=array("id" =>$id, "price" => $price);

if(!isset($_SESSION['cart'])){
	$_SESSION['cart']=$arr;
	}
	else{
		$arr2=$_SESSION['cart'];
	}
if(isset($arr2)){
$result=array_merge($arr2,$arr);
$_SESSION['cart']=$result;
}
else{
	$result=$arr;
	}
foreach($result as $k => $v) {
    print "\$result[$k] => $v.\n";
}
?>
по идее массивы должны сливаться , но почемуто каждый раз результат новый((
 

dimagolov

Новичок
1. почему не проверяешь установлены или нет $_POST['id']/$_POST['price']?
2. Вместо всех этих манипуляций почему бы не написать:
PHP:
if (!isset($_SESSION['cart'])) $_SESSION['cart']= array ();
$_SESSION['cart']= array_merge($_SESSION['cart'],$arr);
 

FRIE

Новичок
PHP:
<?php ini_set('display_errors', 'on');
error_reporting(E_ALL);
session_start();
if(isset($_POST['id'])){$id=$_POST['id'];}
if(isset($_POST['price'])){$price=$_POST['price'];}
$arr=array("id" =>$id, "price" => $price);

if (!isset($_SESSION['cart'])) {$_SESSION['cart']= array ();}
$_SESSION['cart']= array_merge($_SESSION['cart'],$arr);
$result=$_SESSION['cart'];
foreach($result as $k => $v) {
    print "\$result[$k] => $v.\n";
}
?>
поменял как ты сказал, а вот почему новые значения перезаписывают старые до сих пор не понимаю
 

sky_fox

Новичок
потому, что ты документацию не читаешь

http://php.net/manual/en/function.array-merge.php
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one

Кусок кода очень прост, тем не менее не понятно:
1. где ты хранишь количество единиц товара
2. зачем ты в сессии гоняешь цену?
3. если хочешь добавлять товары в массив cart = добавляй или как $_SESSION['cart'][$id] = $price или как $_SESSION['cart'][] = $arr
 

FRIE

Новичок
Автор оригинала: sky_fox
потому, что ты документацию не читаешь

http://php.net/manual/en/function.array-merge.php
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one

Кусок кода очень прост, тем не менее не понятно:
1. где ты хранишь количество единиц товара
2. зачем ты в сессии гоняешь цену?
3. если хочешь добавлять товары в массив cart = добавляй или как $_SESSION['cart'][$id] = $price или как $_SESSION['cart'][] = $arr
количество единиц товара пока еще нигде не храню , мне бы сначала разобраться с тем чтобы старые значения не перезаписывались

в сесси гоняю цену тк у 2 товаров может быть 1 id но разные цены , например есть ,большой чемодан у него id=333 и есть маленький точно такой же чемодан у него тоже id=333 но первый стоит 1000 а второй 500. тоесть товары разных размеров поэтому у одного товара несколько цен, и по базе id один и тот же а в корзине эти товары как бы разные
и кроме этого я еще и описание в массив хочу запихнуть, а всё для того чтобы с базой не соединяться лишний раз, чтобы всё быстро работало

насчёт 3 пункта попробую завтра. на сегодня хватит, и так целый день мозг вскрывал себе и другим =)))
 

dimagolov

Новичок
тоесть товары разных размеров поэтому у одного товара несколько цен, и по базе id один и тот же а в корзине эти товары как бы разные
это как бы редкостный маразм. а если хакер вася пришлет цену не 500 и не 1000 а 300, ты что делать будешь?

ну и в коде у тебя глупость:
PHP:
if(isset($_POST['id'])){$id=$_POST['id'];}
у тебя должно быть:
PHP:
if(!isset($_POST['id']) || !isset($_POST['price'])) { // тут можно валидацибю значений добавить
   processError();
   die();
}
// работаем с $_POST['id'] и с $_POST['price'], они 100% определены
 

Beavis

Banned
неужели так сложно выполнить несколько примерчиков из мануала чтобы понять что вообще из себя массив, ключ, значение представляют, и не мучиться тут на форуме...
 

FRIE

Новичок
так и неразобрался. мне нужен готовый пример чтобы понять, но мне его никто не кинет это уже понятно, так что на первое время я сделал корзину на связке php+mysql товары в базу заносятся в таблицу cart, потом скрипт проходит по табле и удаляет все товары которым больше 3 часов.

Пожалуста выскажете свое мнение по поводу решения корзины на базе mysql , плюсы и минусы
 
Сверху