私は学校のプロジェクト用にこのコードを持っていて、コードが私がやりたいことを実行していると思っていましたが、 $_SESSION[] is not a array argument を使用しているときにエラーが発生し続けていますarray_replace()
およびarray_merge()
関数:
セッションはすでにヘッダーで開始されています:
// Start Session
session_start();
$_SESSION['cart']
を配列として初期化する場合:
// Parent array of all items, initialized if not already...
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = array();
}
ドロップダウン メニューから製品を追加する場合: - (セッションがどのように割り当てられているかを確認するためだけに:)
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()
ため、代わりに使用する関数です:具体的には2つの深さ配列:in_array()
ここから見つけて、それは私のために働きます
そのコードは次のとおりです。
// 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;
}