0

我正在实施一个包含很少产品的小型在线购买页面。

<?php  
$item_name = "lamp";
$item_price = 29.99;
$item_category = "furniture";
$item_Dollar = 29;
$item_Cents = 99;
?>

我该怎么做?它只有 2 种产品类型,基本上只有价格会有所不同,因此不需要数据库。我正在考虑包含一个包含所有价格的 .php 文件,并在那里有一个函数可以switch($id)在它们之间重新分配值。

<?php
    function selectProduct($id) {

     switch($id) {
          case 1:
              $item_name = "lamp";
              $item_price = 19.99;
              $item_category = "furniture";
              $item_Dollar = 19;
              $item_Cents = 99;
              break;

          case 2:
              // and so on...

          default: break;
     }
    }
?>

逻辑进入各个案例,但它不会重新分配实例变量。出于某种原因,当我尝试在require_once(pricings.php);它们为空后在另一个页面上访问它们时。我对 PHP 不是很熟悉,这可能从代码中显而易见。我究竟做错了什么?

4

5 回答 5

1

我将构建一个项目数组,其中每个元素都是一个键/值对,键是项目 id,值是项目属性的另一个键/值对数组:

$items = array(
    1 => array(
        'name' => 'lamp',
        'price' => '19.99',
        'category' => 'furniture',
    ),
    2 => array(
        'name' => 'chair',
        'price' => '29.99',
        'category' => 'furniture',
    ),
);

然后,您可以通过使用其产品 id 作为索引来简单地引用该数组:

$id = 1;
echo "Name is: " . $items[$id]['name'];
echo "Price is: " . $items[$id]['price'];
于 2013-10-29T18:35:37.837 回答
0

就个人而言,我会忘记使您的数据功能化而只使用数组。那是为了什么。这也将使将来将数据移植到数据库变得更加容易。

<?php 
$products = array(
    array('item_name'=>'lamp', 'item_price'=>19.99, 'item_category'=>'furniture', 'item_dollar'=>19, 'item_cents'=>99),
    array('item_name'=>'chair', 'item_price'=>19.99, 'item_category'=>'furniture', 'item_dollar'=>19, 'item_cents'=>99),
);
//
echo $products[0]['item_name'];
?>
于 2013-10-29T18:36:01.463 回答
0

我会将您的项目存储为 JSON 对象,该对象可以轻松转换为原生 php 数组,并且还允许根据需要直接更新和添加项目。我不会在这里讨论这些好处,但这些项目可以存储为:

{
  "1": {
    "name": "lamp",
    "price": "19.99",
    "category": "furniture"
  },
  "2": {
    "name": "chair",
    "price": "29.99",
    "category": "furniture"
  }
}

在一个文件中,如items.json需要与之交互时,将其转换为原生 php:

$items_json = file_get_contents('items.json');
$items = json_decode($items_json, true);

然后正如 Alex 所展示的,您可以像这样与您的项目列表进行交互:

$id = 1;
echo "Name is: " . $items[$id]['name'];
echo "Price is: " . $items[$id]['price'];
于 2013-10-29T18:53:09.553 回答
-1

要更改变量范围,请添加 global 关键字并列出所有全局变量,请尝试:

function selectProduct($id) {
  global $item_name, $item_price, $item_category, $item_Dollar, $item_Cents;

但这不是一个好习惯。恕我直言,您应该将数据包装到对象中,然后返回对象,即:

function selectProduct($id) {
  $item = new StdClass;
  //...
  switch($id) {
    case 1: $item->name = "name";
            //...
            break;
    //...
  }
  return $item;
}
于 2013-10-29T18:33:51.297 回答
-1
<?php
$array_to_use = array();  
$array_to_use['item_name'] =  $item_name = "lamp";
 $array_to_use['item_price'] = $item_price = 29.99;
 $array_to_use['item_category'] = $item_category = "furniture";
 $array_to_use['item_Dollar'] = $item_Dollar = 29;
$array_to_use['item_Cents'] =  $item_Cents = 99;
?>

<?php
    function selectProduct($id) {
    global $array_to_use; 
   extract($array_to_use); 
     switch($id) {
          case 1:
              $item_name = "lamp";
              $item_price = 19.99;
              $item_category = "furniture";
              $item_Dollar = 19;
              $item_Cents = 99;
              break;

          case 2:
              // and so on...

          default: break;
     }
    }
?>

更新应该工作。

于 2013-10-29T18:36:40.947 回答