如何使这些变量在foreach循环中动态化

时间:2016-01-28 09:38:40

标签: php laravel

我有购物车数据,我想使用贝宝,然后我想将购物车数据制作成这种格式

代码:

$item_1 = new Item();
$item_1->setName('Item 1') // item name
    ->setCurrency('USD')
    ->setQuantity(2)
    ->setPrice('15'); // unit price

$item_2 = new Item();
$item_2->setName('Item 2')
    ->setCurrency('USD')
    ->setQuantity(4)
    ->setPrice('7');

$item_3 = new Item();
$item_3->setName('Item 3')
    ->setCurrency('USD')
    ->setQuantity(1)
    ->setPrice('20');

// add item to list
$item_list = new ItemList();
$item_list->setItems(array($item_1, $item_2, $item_3));

2 个答案:

答案 0 :(得分:1)

PHP允许您动态创建变量的名称 例如:

<?php 
    class A {
        public $member;
    }

    for($i=0 ; $i<5 ; $i++) {
        $var_pattern = sprintf('item_%s', ($i+1));
        ${$var_pattern} = new A();
        ${$var_pattern}->member = $i;
    }

转储定义的变量会显示:

print_r(get_defined_vars());

<强>输出

[item_1] => A Object
    (
        [member] => 0
    )

[item_2] => A Object
    (
        [member] => 1
    )

[item_3] => A Object
    (
        [member] => 2
    )

[item_4] => A Object
    (
        [member] => 3
    )

[item_5] => A Object
    (
        [member] => 4
    )

答案 1 :(得分:1)

您可以先在assoc数组中定义不同的数据:

$data = array(
  array(
    'quantity' => 1,
    'price' => '15'),
... // etc
);

然后迭代它并添加到结果数组:

$result = array();
for($i = 0; $i < count($data); ++$i) {
  $obj = new Item();
  $obj->setName('Item ' . ($i+1)) // item name
        ->setCurrency('USD')
        ->setQuantity($data[i]['quantity'])
        ->setPrice($data[i]['price']); 
  $result[] = $obj;
}
$item_list = new ItemList();
$item_list->setItems($result);