0

テキストファイルを使用して基本的なショッピングカートに取り組んでいます(教育目的のためだけに)。次のように、各行に 1 つの製品が表示される形式になっています。

Product name|Price|Quantity 
Product name|Price|Quantity 
Product name|Price|Quantity 

cart.txt ファイルを調べて、まだカートにない場合は数量 1 で製品を新しい行に追加するか、その製品の数量に 1 を追加する addToCart() 関数をどのように達成しますか?すでにカートに入っていますか?

4

3 に答える 3

1

同じ形式を使用できますが、ID 列を追加すると、次のようになります。

ProductID|Product name|Price|Quantity 
ProductID|Product name|Price|Quantity 
ProductID|Product name|Price|Quantity 

次に、ID フィールドを配列キーとして使用します。製品名にも同様のアプローチを使用できますが、スペースや特殊文字を削除する必要があります。

  $raw = file_get_contents($path);
  $raw = explode("\n", $raw);
  $data = array();
  foreach ($raw as $d) {
    $d = explode('|', $d);
    // the left-most data will be our key
    $key = array_shift($d);
    $data[$key] = $d;
  }

これで、次のような配列が得られます (例):

array(
  5=>array(
    'Widget id #5',
    '5.00',
    '2'
  ),
  11=>array(
    'Widget id #11',
    '6.00',
    '1'
  )
)

さらに簡単な方法は、ファイル形式に JSON を使用することです。そうすれば、ファイルからデータを取得した後にデータを解析する必要がなくなり、連想キーを実装するのが簡単になります。どちらの方法でも、同じ手順に従います。

  • ファイルからデータを取得して変数に入れる
  • 商品がすでにカートに入っているかどうかを確認する
    • そうでない場合は、追加します
  • 数量を 1 ずつ増やします (実際にはその他の数値)。
  • データをファイルに書き戻す

JSON を使用すると、次のようになります。

$path = 'path/to/data.txt';
$data = json_decode(file_get_contents($path), true);

// if the product isn't in the cart, add it
if (array_key_exists($product_id, $data) === false) {

  // retrieve the product information for $product_id
  // populate $product_name and $product_price

  $data[$product_id] = array(
    'name'=>$product_name,
    'quantity'=>0,
    'price'=>$product_price
  );
}

// increment the quantity
$data[$product_id]['quantity']++;  // $data[$product_id][2]++ if you didn't use JSON

// write the data back into the file
file_put_contents($path, json_encode($data));

ドキュメンテーション

于 2013-03-30T01:43:32.117 に答える
0

fgetcsvをデリミタ付きで使用することを検討できます|

于 2013-03-29T23:43:27.910 に答える
0

たぶん、次のようなことができます:

function search_in_file($product_name, $price){
    $row = 1;
    $handle = fopen("cart.csv", "w"));
    if ( $handle !== FALSE) {
        while (($data = fgetcsv($handle, 0, "|")) !== FALSE) {
            if($data[0] == $product_name){
                $data[0] += 1;
                fclose($handle);
                return;
            }

        }
        fputcsv($handle, array($product_name, $price, 1);
        fclose($handle);
    }
}

どうか、これをアイデアとして受け取ってください。

于 2013-03-30T01:30:46.973 に答える