Структура массива для корзины покупок - PullRequest
0 голосов
/ 29 сентября 2011

Я пытаюсь реализовать многомерный массив, который содержит данные идентификаторов Pizza с опциями и идентификаторами дополнительных элементов.

Давайте посмотрим на следующий сценарий ...

Клиент хочет

  • Две «Куриные пиццы» (ProductID:12) - «10 дюймов» (OptionsID:4) с добавками ветчины и тунца (ExtrasID: 5,10)

  • Одна «Куриная пицца» (ProductID:12) - «10 дюймов» (OptionsID:4) с добавками сладкой кукурузы (ExtrasID: 2)

  • Одна «Куриная пицца» (ProductID:12) - «14 дюймов» (OptionsID:2) без дополнительных услуг

  • Одиннадцать «Вегетарианская пицца» (ProductID:35) - «7 дюймов» (OptionsID:52) без дополнительных услуг

Смотрите следующий код ниже, который соответствует сценарию ... Я правильно делаю? или что можно сделать, чтобы улучшить его и прочитать?

<code>//Two 'Chicken Pizza' (ProductID:12) - '10 inches' (OptionsID:4) 
//With extras of Ham and Tuna (ExtrasID: 5,10)
$option4[] = array(
    'quantity' => 2,
    'extras_id' => array(5, 10)
);

//One 'Chicken Pizza' (ProductID:12) - '10 inches' (OptionsID:4) 
//With extras of Sweet Corn (ExtrasID: 2)
$option4[] = array(
    'quantity' => 1,
    'extras_id' => array(2)
);

//One 'Chicken Pizza' (ProductID:12) - '14 inches' (OptionsID:2) 
//With no extras
$option2[] = array(
    'quantity' => 1,
    'extras_id' => array()
);

//Eleven 'Vegetarian Pizza' (ProductID:35) - '7 inches' (OptionsID:52) 
//With no extras
$option52[] = array(
    'quantity' => 11,
    'extras_id' => array()
);

//Hold data of Customer Orders 
$shoppingBasket = array(
    "ShopID_24" => array(
        'ProductID' => array(
            '12' => array(
                'OptionID' => array(
                    '4' => $option4,
                    '2' => $option2
                )
            ),
            '35' => array(
                'OptionID' => array(
                    '52' => $option52
                )
            ),
        )
    )
);

echo "<pre>";
print_r($shoppingBasket);
echo "
";

вывод print_r:

Array
(
    [ShopID_24] => Array
        (
            [ProductID] => Array
                (
                    [12] => Array
                        (
                            [OptionID] => Array
                                (
                                    [4] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [quantity] => 2
                                                    [extras_id] => Array
                                                        (
                                                            [0] => 5
                                                            [1] => 10
                                                        )
                                                )
                                            [1] => Array
                                                (
                                                    [quantity] => 1
                                                    [extras_id] => Array
                                                        (
                                                            [0] => 2
                                                        )
                                                )

                                        )
                                    [2] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [quantity] => 1
                                                    [extras_id] => Array ()
                                                )
                                        )
                                )
                        )

                    [35] => Array
                        (
                            [OptionID] => Array
                                (
                                    [52] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [quantity] => 11
                                                    [extras_id] => Array ()
                                                )
                                        )
                                )
                        )
                )
        )
)

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Я хотел бы сделать это, моделируя одни и те же данные в нескольких пользовательских объектах PHP. В этом случае у вас может быть объект магазина с продуктами и объекты продуктов с опциями. Это действительно быстро с моей головы:

class Shop {

    private $_products = array();

    public function getProducts() 
        { return $this->_products;}

    public function addProduct(Product $product) 
        { $this->_products[] = $product; 
          return $this;
        }

}

class Product {
    private $_options = array();

    public function getOptions()
        { return $this->_options; }

    public function addOption(Option $option)
        { $this->_options[] = $option;
          return $this;
        }
}

class Option {
    private $_optionKey;
    private $_optionValue;

    public function getKey()
        { return $this->_optionKey; }

    public function getKey()
        { return $this->_optionValue; }

    public function setOption($key, $value)
        { 
          $this->_optionKey = $key;
          $this->_optionValue = $value;
          return $this;
        }
}

Что это тебе дает? Для начала вы можете определить пределы и параметры для того, что вы можете сохранить в этом, в то время как с вложенным массивом, который вы используете, абсолютно нет применения структуры или значения. Вы также можете определить другие методы, которые позволяют вам на самом деле делать вещи с этими битами данных.

Если вы абсолютно ДОЛЖНЫ иметь такую ​​версию массива, вы можете реализовать в каждом из них что-то вроде toArray() метода, который преобразует объекты в массив, который будет использоваться другим битом кода. Вы могли бы также рассмотреть чтение на нескольких интерфейсах, таких как итератор и счетчик в руководстве по PHP.

1 голос
/ 29 сентября 2011

Я рекомендую вам использовать ОО-программирование, это избавит вас от головной боли! Попробуйте что-то вроде этого:

<?php
class Extra
{
    var $id;
    var $name;
    var $amount;

    function __construct()
    {
        $this->id = 0;
        $this->name = '';
        $this->amount = 0;
    }
}
class Option
{
    var $id;
    var $name;

    function __construct()
    {
        $this->id = 0;
        $this->name = '';
    }
}
class Pizza
{
    var $id;
    var $name;
    var $options;
    var $extras;

    function __construct()
    {
        $this->id = 0;
        $this->name = '';
        $this->options = array();
        $this->extras = array();
    }
}
?>

И чтобы проверить это:

<?php
$pizzas = array();
for($i=0; $i<10; $i++)
{
    $pizza = new Pizza();
    $pizza->id = $i;
    $pizza->name = 'Pizza '.$i;
    for($j=0; $j<$i; $j++)
    {
        $option = new Option();
        $option->id = $j;
        $option->name = 'Option '.$j;
        $pizza->options[] = $option;
    }
    for($k=$i; $k>0; $k--)
    {
        $extra = new Extra();
        $extra->id = $k;
        $extra->name = 'Extra '.$k;
        $extra->amount = $k;
        $pizza->extras[] = $extra;
    }
    $pizzas[] = $pizza;
}
print_r($pizzas);
?>

Удачи:)

1 голос
/ 29 сентября 2011

Вы настроили один массив в начале, хорошо. Теперь используйте его правильно.

$option['ShopID_'.$id]; //where $id is obviusly the id number;

Теперь заполните массив $ option ордерами.

$option['ShopID_'.$id]['ProductId_'.$pid][] = array(
    'quantity' => 1,
    'extras_id' => array(2), //maybe a string is enough here (?) (e.g. '2,5,etc..')
    'inches' => $inches
);

$pid - это, безусловно, идентификатор пиццы, который вы ищете ..

также это просто "статический" пример!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...