gpt4 book ai didi

php - 数组替换()/数组合并() | ( $_SESSION = array() ) 参数不是数组?

转载 作者:搜寻专家 更新时间:2023-10-31 21:12:32 24 4
gpt4 key购买 nike

我的学校项目有这段代码,我认为代码按照我想要的方式完成了工作,但在使用 array_replace 时,我仍然不断收到关于 $_SESSION[] 不是数组参数的错误()array_merge() 函数:

session 已经在标题上启动:

 // Start Session
session_start();

$_SESSION['cart'] 初始化为一个数组:

// Parent array of all items, initialized if not already...
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = array();
}

从下拉菜单中添加产品:-(只是为了查看 session 是如何分配的:)

if (isset($_POST['new_item'])) { // If user submitted a product
$name = $_POST['products']; // product value is set to $name

// Validate adding products:
if ($name == 'Select a product') { // Check if default - No product selected
$order_error = '<div class="center"><label class="error">Please select a product</label></div>';
} elseif (in_array_find($name, $_SESSION['cart']) == true) { // Check if product is already in cart:
$order_error = '<div class="center"><label class="error">This item has already been added!</label></div>';
} else {
// Put values into session:
// Default quantity = 1:
$_SESSION['cart'][$name] = array('quantity' => 1);
}
}

当他们尝试更新产品时,问题就出在这里:

// for updating product quantity:
if(isset($_POST['update'])) {
// identify which product to update:
$to_update = $_POST['hidden'];
// check if product array exist:
if (in_array_find($to_update, $_SESSION['cart'])) {
// Replace/Update the values:
// ['cart'] is the session name
// ['$to_update'] is the name of the product
// [0] represesents quantity
$base = $_SESSION['cart'][$to_update]['quantity'] ;
$replacement = $_SESSION['cart'][$to_update] = array('quantity' => $_POST['option']);
array_replace($base, $replacement);
// Alternatively use array merge for php < 5.3
// array_merge($replacement, $base);
}
}

请注意,函数 array_replace()array_merge() 都在更新值并执行最初的目标,但问题是我仍然继续获取那个参数 ($base) 不是数组问题。

警告:array_replace() [function.array-replace]:参数 #1 不是数组......

任何有关解决此问题的更好方法的建议都将是宝贵的帮助:)感谢您的帮助:)

编辑:in_array_find() 是我用来替换 in_array() 的函数,因为它不适用于在多维数组中查找值:特别是 2 个深度数组:

here 找到它对我有用

它的代码是:

// Function for searching values inside a multi array:
function in_array_find($needle, $haystack, $strict = false) {
foreach ($haystack as $item => $arr) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}

return false;
}

最佳答案

array_replace返回替换后的数组。所以你需要做:

$base=array_replace($base, $replacement);

此外,我建议始终使用命名键,而不是混合使用命名键和数字键:

$base = $_SESSION['cart'][$to_update]['quantity'];

编辑:

这可能不是您想要的...

我在没有使用 $_SESSION 的情况下设置了一个测试环境,我得到了和你一样的错误。我按如下方式更改了代码,不再出现错误。

$sesh=array(
'cart'=>array(
0=>array(
'quantity'=>1
)
)
);

$to_update=0;
$new_quantity=5;

//$base = $sesh['cart'][$to_update]['quantity']; <--- changed this to line below
$base = $sesh['cart'][$to_update];

$replacement = $sesh['cart'][$to_update] = array('quantity' => $new_quantity);
$base=array_replace($base, $replacement);

echo"<pre>";print_r($base);echo"</pre>";

PHP fiddle :http://phpfiddle.org/main/code/mvr-shr

关于php - 数组替换()/数组合并() | ( $_SESSION = array() ) 参数不是数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16245377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com