比较两个相同但 return false 的字符串
comparing two string same but return false
我有一个带有数组结果的会话:
Array (
[0] => Array (
[code] => 16
[qty] => 1
)
[1] => Array (
[code] => 17
[qty] => 1
)
[2] => Array (
[code] => 20
[qty] => 1
)
)
我想删除特定的一项,所以我写了代码:
$t = "a";
foreach ($_SESSION["products"] as $cart_itm) //loop through session array var
{
echo "Cart item code".$cart_itm["code"];
echo "product_code".$product_code."<br/>";
if($cart_itm["code"] === $product_code){ //item does,t exist in the list
$t="b";
unset($_SESSION["products"][$product_code]);
}else{
$t = "c";
}
//create a new product list for cart
}
echo "$t";
print_r($_SESSION["products"])
我得到了一个结果:
Cart item code16 product_code17
Cart item code17 product_code17
Cart item code20 product_code17
cArray (
[0] => Array (
[code] => 16
[qty] => 1
)
[1] => Array (
[code] => 17
[qty] => 1
)
[2] => Array (
[code] => 20
[qty] => 1
)
)
我不明白为什么变量不是 b 因为第二个数组应该 return true ?
编辑:
感谢您的帮助,我已经尝试了解决方案,但未设置的会话仍然无法正常工作
session_start();
$product_code = $_GET["pid"]; //get the product code to remove
echo "before :";
print_r($_SESSION["products"]);
echo "<br/>";
$t="a";
foreach($_SESSION['products'] as $key => $cart_item) {
if($key === $product_code) {
unset($_SESSION["products"][$key]);
$t="b";
}
}
echo "after :";
print_r($_SESSION["products"]);
echo "$t";
但我还是得到了结果:
之前:数组([16] => 数组([qty] => 1)[19] => 数组([qty] => 1)[18] => 数组([qty] => 1 ) )
之后:数组([16] => 数组([qty] => 1)[19] => 数组([qty] => 1)[18] => 数组([qty] => 1))a
是不是浏览器缓存的问题?
编辑:
我终于想出了解决办法。
$a = "";
foreach ($_SESSION["products"] as $key => $cart_itm) //loop through session array var
{
if($cart_itm["code"] == $product_code) { //item does,t exist in the list
$a = $key;
}
}
$b = (int)$a;
unset($_SESSION["products"][$b]);
如果您无法管理会话的设置方式,这对您有用:
foreach($_SESSION['products'] as $key => $cart_itm) {
if($cart_itm["code"] == $product_code){ //item does,t exist in the list
unset($_SESSION["products"][$key]);
}
}
如果您可以修改会话的设置方式
如果我是你,我会按照 Dagon 在评论中所说的去做。如果您有权访问创建会话变量的 PHP,您应该像这样存储它:
$_SESSION['products'][PRODUCT_CODE] = array('qty' => 1);
这会导致你有一个像这样的数组:
Array (
[product_code] => Array (
[qty] => 1
),
[product_code] => Array (
[qty] => 1
),
[product_code] => Array (
[qty] => 1
)
)
这样,您可以简单地 运行 像这样的 foreach 循环:
foreach($_SESSION['products'] as $key => $cart_item) {
if($key === $product_code) {
unset($_SESSION[$key]);
}
}
编辑
如ghost所说,直接做会简单很多:
if(isset($_SESSION['products'][$product_code]) unset($_SESSION['products'][$product_code);
或
if(array_key_exists($product_code, $_SESSION['products'])) {
unset($_SESSION['products'][$product_code]);
}
函数参考:array_key_exists()
& isset()
.
首先,变量不是b
的原因是因为您在else
分支中将变量设置回c
。
也就是说,即使变量在某个时候设置为 b
,您的循环仍会继续 运行(在第三次迭代中,$cart_itm["code"]
是现在 20
) 并评估 else
分支,将变量设置回 c
.
其次,您正在取消设置错误的东西 - $product_code
不是要使用的正确索引。
$t = "a";
foreach ($_SESSION["products"] as $key => $cart_itm) //loop through session array var
{
echo "Cart item code".$cart_itm["code"];
echo "product_code".$product_code."<br/>";
if ($cart_itm["code"] === $product_code) { //item does,t exist in the list
$t = "b";
unset($_SESSION["products"][$key]);
}
//create a new product list for cart
}
echo "$t";
print_r($_SESSION["products"]);
你应该得到:
Cart item code16 product_code17
Cart item code17 product_code17
Cart item code20 product_code17
aArray (
[0] => Array (
[code] => 16
[qty] => 1
)
[2] => Array (
[code] => 20
[qty] => 1
)
)
我有一个带有数组结果的会话:
Array (
[0] => Array (
[code] => 16
[qty] => 1
)
[1] => Array (
[code] => 17
[qty] => 1
)
[2] => Array (
[code] => 20
[qty] => 1
)
)
我想删除特定的一项,所以我写了代码:
$t = "a";
foreach ($_SESSION["products"] as $cart_itm) //loop through session array var
{
echo "Cart item code".$cart_itm["code"];
echo "product_code".$product_code."<br/>";
if($cart_itm["code"] === $product_code){ //item does,t exist in the list
$t="b";
unset($_SESSION["products"][$product_code]);
}else{
$t = "c";
}
//create a new product list for cart
}
echo "$t";
print_r($_SESSION["products"])
我得到了一个结果:
Cart item code16 product_code17
Cart item code17 product_code17
Cart item code20 product_code17
cArray (
[0] => Array (
[code] => 16
[qty] => 1
)
[1] => Array (
[code] => 17
[qty] => 1
)
[2] => Array (
[code] => 20
[qty] => 1
)
)
我不明白为什么变量不是 b 因为第二个数组应该 return true ?
编辑:
感谢您的帮助,我已经尝试了解决方案,但未设置的会话仍然无法正常工作
session_start();
$product_code = $_GET["pid"]; //get the product code to remove
echo "before :";
print_r($_SESSION["products"]);
echo "<br/>";
$t="a";
foreach($_SESSION['products'] as $key => $cart_item) {
if($key === $product_code) {
unset($_SESSION["products"][$key]);
$t="b";
}
}
echo "after :";
print_r($_SESSION["products"]);
echo "$t";
但我还是得到了结果:
之前:数组([16] => 数组([qty] => 1)[19] => 数组([qty] => 1)[18] => 数组([qty] => 1 ) ) 之后:数组([16] => 数组([qty] => 1)[19] => 数组([qty] => 1)[18] => 数组([qty] => 1))a
是不是浏览器缓存的问题?
编辑:
我终于想出了解决办法。
$a = "";
foreach ($_SESSION["products"] as $key => $cart_itm) //loop through session array var
{
if($cart_itm["code"] == $product_code) { //item does,t exist in the list
$a = $key;
}
}
$b = (int)$a;
unset($_SESSION["products"][$b]);
如果您无法管理会话的设置方式,这对您有用:
foreach($_SESSION['products'] as $key => $cart_itm) {
if($cart_itm["code"] == $product_code){ //item does,t exist in the list
unset($_SESSION["products"][$key]);
}
}
如果您可以修改会话的设置方式
如果我是你,我会按照 Dagon 在评论中所说的去做。如果您有权访问创建会话变量的 PHP,您应该像这样存储它:
$_SESSION['products'][PRODUCT_CODE] = array('qty' => 1);
这会导致你有一个像这样的数组:
Array (
[product_code] => Array (
[qty] => 1
),
[product_code] => Array (
[qty] => 1
),
[product_code] => Array (
[qty] => 1
)
)
这样,您可以简单地 运行 像这样的 foreach 循环:
foreach($_SESSION['products'] as $key => $cart_item) {
if($key === $product_code) {
unset($_SESSION[$key]);
}
}
编辑
如ghost所说,直接做会简单很多:
if(isset($_SESSION['products'][$product_code]) unset($_SESSION['products'][$product_code);
或
if(array_key_exists($product_code, $_SESSION['products'])) {
unset($_SESSION['products'][$product_code]);
}
函数参考:array_key_exists()
& isset()
.
首先,变量不是b
的原因是因为您在else
分支中将变量设置回c
。
也就是说,即使变量在某个时候设置为 b
,您的循环仍会继续 运行(在第三次迭代中,$cart_itm["code"]
是现在 20
) 并评估 else
分支,将变量设置回 c
.
其次,您正在取消设置错误的东西 - $product_code
不是要使用的正确索引。
$t = "a";
foreach ($_SESSION["products"] as $key => $cart_itm) //loop through session array var
{
echo "Cart item code".$cart_itm["code"];
echo "product_code".$product_code."<br/>";
if ($cart_itm["code"] === $product_code) { //item does,t exist in the list
$t = "b";
unset($_SESSION["products"][$key]);
}
//create a new product list for cart
}
echo "$t";
print_r($_SESSION["products"]);
你应该得到:
Cart item code16 product_code17
Cart item code17 product_code17
Cart item code20 product_code17
aArray (
[0] => Array (
[code] => 16
[qty] => 1
)
[2] => Array (
[code] => 20
[qty] => 1
)
)