PHP - Создание многомерного массива из запроса к базе данных - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю сайт электронной коммерции, в котором есть товары с несколькими атрибутами (размер, цвет и т. Д.), Поэтому у каждого атрибута также есть несколько значений (для размера это будет: маленький, средний, большой и т. Д.).)

У меня есть массив идентификаторов, представляющих атрибуты, например:

$attributes = [1,2,3];

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

array (size=3)
  1 => size
      0 => 'small'
      1 => 'medium'
      2 => 'large'
  2 => colour
      0 => 'red'
      1 => 'green'
      2 => 'blue'
  3 => pattern
      0 => 'spots'
      1 => 'stripes'
      2 => 'plain'

То, что я имею до сих пор, выглядит так:

$attribute_array = [];
foreach($attributes as $attribute_id){
    $params = [$attribute_id];
    $sql = "SELECT * FROM attributes WHERE attribute_id=?";
    $stmt = DB::run($sql,$params);
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $attribute_value = $row['attribute_value'];

        //$attribute_array[$attribute_id] = $attribute_value; // this only takes the last value from the last row
        //array_push($attribute_array[$attribute_id],$attribute_value); // this says that the first arg isn't an array
    }
}

Любая помощь или предложения с этим будет принята с благодарностью.

В итоге я хочу получить все комбинации атрибутов для продукта (маленькие + красные + полосы, маленькие + зеленые + полосы, маленькие + синие + полосы и т. Д.).

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018
    $attribute_array = [];
    foreach($attributes as $attribute_id){
    $params = [$attribute_id];
    $sql = "SELECT size,colour,pattern,etc FROM attributes WHERE attribute_id=?";
    $stmt = DB::run($sql,$params);
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
           // $attribute_value = $row['attribute_value'];
            $attribute_array[] = $row;
        }
    }

Выполнение этого способа вернет массив атрибутов и сохранит их в 0-индексированном ассоциативном массиве.

    $attribute_array[0][size,colour,pattern]

Пример: $ size = $ attribute_array [0] ['size']

0 голосов
/ 21 сентября 2018

Вы были почти там ...

$attribute_array[$attribute_id][] = $attribute_value;

обратите внимание на [], который добавляет значение в список значений, уже там - без него он просто перезапишет предыдущее значение.

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