[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: возвращается два значения
Dagot
есть такие строки

$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 прям так и выводит как будто их два

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.

Спустя 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

Спустя 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 выводит

вот этот кусок
$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, стучите начинающие прогеры, будем вместе прорываться)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.