Многомерные массивы в PHP - PullRequest
3 голосов
/ 01 мая 2009

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

Сью покупает 2 ванны масла и 1. зубная паста

Джон покупает 1 персик и 1 банан.

Я думаю, что массив будет выглядеть примерно так

$sue[butter] = array(); 
$sue[butter][] = 2;
$sue[toothpaste] = array(); 
$sue[toothpaste][] = 1;
$john[peach] = array(); 
$john[peach][] = 1;
$john[banana] = array(); 
$john[banana][] = 1;

Мой текущий код может записывать только товар и количество товара.

public $items = array();

public function AddItem($product_id)
{
    if (array_key_exists($product_id , $this->items))
    {
        $this->items[$product_id] = $this ->items[$product_id] + 1;
    } else {
        $this->items[$product_id] = 1;
    }
}

Я просто не знаю, как поместить это в массив для каждого человека.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 01 мая 2009

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

Как только вы попадаете в многомерные массивы, становится сложнее поддерживать ваш код.

Например (это псевдокод):

class Customer {
    //this is an array of FoodItem objects.
    private $foodItems[];

    // any other methods needed for access here
}

class FoodItem {
    //could be a String, or whatever it needs to be
    private $itemType;

    //the number of that item purchased
    private $numPurchased;
}
3 голосов
/ 01 мая 2009

Хм, может быть, я не вижу здесь многомерности?

$sue = array();
$sue['butter'] = 2;
$sue['toothpaste'] = 1;

$john = array();
$john['peach'] = 1;
$john['banana'] = 1;

Я думаю, что функция, которую вы показали, будет работать с вышеуказанным.

1 голос
/ 01 мая 2009

Вам не нужно создавать другой массив для хранения количества элементов, как вы сделали здесь:

$sue[butter] = array(); 
$sue[butter][] = 2;

Я думаю, что-то вроде этого будет работать:

$customers[sue][butter] = 2; 
$customers[sue][toothpaste] = 1; 
$customers[john][peach] = 1; 
$customers[john][banana] = 1;

Таким образом, вы создаете массив имен клиентов. Затем в каждом массиве клиентов у вас есть массив их продуктов. Затем каждый товар содержит номер того товара, который купил клиент.

0 голосов
/ 01 мая 2009
$data = array();
$data["persons"] = array("Sue","John");
$data["articles"] = array("butter","toothpaste","peach","banana");

$data["carts"] = array();

$data["carts"][0][0] = 2; // sue's 2 butter packets
$data["carts"][0][1] = 1; // sue's 1 tooth paste

$data["carts"][1][2] = 1; // john's peach
$data["carts"][1][3] = 1; // john's banana
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...