$this->arrAmount = isset($_COOKIE['amountItem'])? unserialize($_COOKIE['amountItem'])
: array();
далее условие
if(!empty($this->arrAmount)) {
$isKey = array_key_exists($this->id, $this->arrAmount);
// дальше тоже код, но это не важно
}
так вот условие срабатывает всегда, потому что empty возвращает сразу два значения true и false
пробовал empty заменить на
if(count($this->arrAmount)>0)
но и тогда происходит выполнение условия, потомучто возвращается сразу 1 и 0
var_dump говорит что поле arrAmount - пустой массив, а в опере вообще так и показывает слово empty
array(0){
}
пробовал передавать значение свояства обычной переменной и работать с ней, но получается такая же байда.
помогите, пожалуйста, может я туплю? полдня мучаюсь уже :(
Спустя 4 минуты, 51 секунда (3.05.2012 - 11:34) Dagot написал(а):
у меня вообще в голове не укладывается как переменая которой возвращается значение может содержать два значения и при этом не быть массивом? :blink:
КАК????? var_dump прям так и выводит как будто их два
вот это выводит 1 вар_дамп!
вот он
пробовал вот это
заменить на обычную конструкцию if else но тоже не помогло
перезапускал сервер, тоже не помогло :(
КАК????? var_dump прям так и выводит как будто их два
int(0)
int(1)
вот это выводит 1 вар_дамп!
вот он
$emp = count($this->arrAmount);
p($emp);
пробовал вот это
$this->arrAmount = isset($_COOKIE['amountItem'])? unserialize($_COOKIE['amountItem'])
: array();
заменить на обычную конструкцию if else но тоже не помогло
перезапускал сервер, тоже не помогло :(
Спустя 22 минуты, 46 секунд (3.05.2012 - 11:57) glock18 написал(а):
то, что вы говорите - возврат двух скалярных значений, не объединенных в массив, штука невозможная в принципе. склоняюсь к тому, что у вас указанный участок кода скорее всего срабатывает два раза, разбирайтесь с кодом, и будьте уверены - никакой мистики здесь нет
Спустя 30 минут, 47 секунд (3.05.2012 - 12:27) Dagot написал(а):
glock18, срабатывает два раза? хм... врядле.
если кто хочет, гляньте пожалуйста вот класс.
срабатывает по нажатию кнопки
если кто хочет, гляньте пожалуйста вот класс.
<?php
/**
* Description of cart
*
* @author Админ
*/
class Cart {
private $_arrCart;
public $id;
public $arrAmount;
public function __construct() {
$this->id = quoteSmart($_POST['id']);
$this->arrAmount = isset($_COOKIE['amountItem'])? unserialize($_COOKIE['amountItem'])
: array();
$this->_arrCart = isset($_COOKIE['cart'])? unserialize($_COOKIE['cart'])
: array();
$res = $this->_isItem();
if(!$this->_isItem()) {
$this->_createArrCart();
$this->_setCookie();
}
}
private function _createArrCart() {
$cart = $this->_arrCart;
if(is_array($cart))
$cart[] = $this->id;
else
exit('получены неверные куки! удалите куки с нашего сайта и тогда вы сможете добавлять товар в корзину.');
$this->_arrCart = $cart;
}
private function _setCookie() {
$cart = serialize($this->_arrCart);
$res = setcookie("cart", $cart, COOKIE_TIME_MIN, ACCESS_DIR , DOMAIN);
if(!$res)
exit('Ошибка! куки не были установлены.');
$amountItem = serialize($this->arrAmount);
$res2 = setcookie("amountItem", $amountItem, COOKIE_TIME_MIN, ACCESS_DIR , DOMAIN);
if(!$res2)
exit('Ошибка! куки не были установлены.');
redirect(URL);
}
private function _isItem() {
if(empty($this->_arrCart))
return false;
$res = in_array($this->id, $this->_arrCart);
if(!$res)
return false;
$amount = 2;
$emp = count($this->arrAmount);
p($emp);
if(!empty($this->arrAmount)) {
$isKey = array_key_exists($this->id, $this->arrAmount);
if($isKey){
$arrAmout = $this->arrAmount;
$amount = $arrAmout[$this->id];
++$amount;
}
}
$this->arrAmount = $arrAmount[$this->id] = $amount;
return true;
}
}
срабатывает по нажатию кнопки
Спустя 7 минут, 24 секунды (3.05.2012 - 12:35) stasuss написал(а):
int count ( mixed $var [, int $mode = COUNT_NORMAL ] )
Возвращает количество элементов в var. Если var не является массивом или объектом, реализующим интерфейс Countable, будет возвращена 1. За одним исключением: если var - NULL, то будет возвращён 0.
Возвращает количество элементов в var. Если var не является массивом или объектом, реализующим интерфейс Countable, будет возвращена 1. За одним исключением: если var - NULL, то будет возвращён 0.
Спустя 2 минуты, 10 секунд (3.05.2012 - 12:37) Dagot написал(а):
Цитата (stasuss @ 3.05.2012 - 10:35) |
int count ( mixed $var [, int $mode = COUNT_NORMAL ] ) Возвращает количество элементов в var. Если var не является массивом или объектом, реализующим интерфейс Countable, будет возвращена 1. За одним исключением: если var - NULL, то будет возвращён 0. |
неее... count возвращает число элементов, допустим в массиве если их ноль то и вернет ноль, а не когда он null.
и что если будет такая запись
$count = null;
$count = count($array);
то $count не переопределиться, а примет значение 0???
Спустя 10 минут, 18 секунд (3.05.2012 - 12:47) stasuss написал(а):
count с этими вот
array() - вернет 0
а array("test"=>"passed") вернет 1
ну и empty в первом случае единичку вернет соответственно
а во и таки $test=100500 вернет единичку из count
array() - вернет 0
а array("test"=>"passed") вернет 1
ну и empty в первом случае единичку вернет соответственно
а во и таки $test=100500 вернет единичку из count
Спустя 15 минут, 19 секунд (3.05.2012 - 13:03) Dagot написал(а):
Цитата (stasuss @ 3.05.2012 - 10:47) |
count с этими вот array() - вернет 0 а array("test"=>"passed") вернет 1 ну и empty в первом случае единичку вернет соответственно а во и таки $test=100500 вернет единичку из count |
ну эт понятно.
но вот только коунт возвращает сразу 1 и 0
var_dump массива строчкой выше показывает что массив пуст!
кстате то что вар_дамп массива срабатывает 1 раз и всегда показывает одно и тоже, исключает возможность цикла.
Спустя 5 минут, 37 секунд (3.05.2012 - 13:08) stasuss написал(а):
не знаю как вардамп показывает два значения у вас. возможно у вас таки не массив в качестве члена класса... ну или интерпретатор глюченый. попробуйте свой код на каком нибудь другом сервере выполнить
Спустя 6 минут (3.05.2012 - 13:14) Dagot написал(а):
капец, уже три значения :o выводит
вот этот кусок
выводит
но усли удалить p($this->arrAmount); , то выведит два значения 1 и 0
каким образом 1 вардамп влияет на ход программы?
вот этот кусок
$emp = count($this->arrAmount);
p($this->arrAmount); //p() - это функция оболочка для вардампа из хелперов.
p($emp);
выводит
array(0) {
}
int(0)
int(2)
int(1)
но усли удалить p($this->arrAmount); , то выведит два значения 1 и 0
каким образом 1 вардамп влияет на ход программы?
Спустя 50 минут, 25 секунд (3.05.2012 - 14:05) Dagot написал(а):
жаль, что никто не смог помочь
Спустя 57 минут, 56 секунд (3.05.2012 - 15:03) stasuss написал(а):
ну во-первых похоже что ваш "вардамп" глючит, раз уж два последоательных вызова меняют результат. как выглядит ваша оболочка? а вы пробовали использовать сам var_dump?
Спустя 29 минут, 23 секунды (3.05.2012 - 15:32) Dagot написал(а):
Уже разобрался, на другом форуме помогли
_____________
аська 615-817, стучите начинающие прогеры, будем вместе прорываться)