Как мне динамически переименовать ключи моего массива, чтобы ключ можно было использовать в качестве первичного ключа в таблице?

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

Я создаю массив динамически с помощью этого инструмента.

http://174.121.67.116 /~achadire/aware5/product_options.php?cid=6

Вывод массива выглядит следующим образом.

 $data = array(
  0 => array(
    0 => 300,
    3 => 186,
  ),
  1 => array(
    0 => 341,
    3 => 186,
  ),
  2 => array(
    0 => 257,
    3 => 186,
  ),
  3 => array(
    0 => 300,
    3 => 360,
  ),
  4 => array(
    0 => 300,
    3 => 187,
  ),
  5 => array(
    0 => 341,
    3 => 360,
  ),
  6 => array(
    0 => 341,
    3 => 187,
  ),
  7 => array(
    0 => 257,
    3 => 360,
  ),
  8 => array(
    0 => 257,
    3 => 187,
  ),
);
  

0 => Массив — это продукт. [0]=>300, [2]=>186 представляют уникальную конфигурацию продукта для данного ключа массива. (например, синий, большой.) (каждая vale является идентификатором атрибута.)

Итак, я хочу загрузить результаты в таблицу products в MySQL. Вот моя проблема:

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

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

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

Ответ №1:

  1. Прекратите выяснять, как генерировать уникальные идентификаторы массива, извлекая следующий идентификатор в последовательности записей. У вас будут большие проблемы с параллелизмом. Измените свое поле ID на автоинкрементное и предоставьте СУБД обрабатывать это.

  2. Создайте UNIQUE ограничение для атрибутов color и size products таблицы. Затем, когда вы вставляете, используйте INSERT ... ON DUPLICATE UPDATE синтаксис an, поэтому у вас никогда не будет продукта с теми же атрибутами.

Комментарии:

1. Хорошо. Первичный ключ может быть инкрементным, но это все равно не решает мою проблему. Каждый ключ в массиве все равно должен быть уникальным. В противном случае у меня будет два ключа с разными комбинациями значений. например, если моя первая партия sku имеет ключ [1] -> 1,2,3, [2] => 1,2,5 amp; [3] => 2,3,4 как я могу сделать свою вторую партию артикулов [4], [5], [6]. Снова ключ идентифицирует продукт, значения которого определяют размеры продукта. Итак, если я добавлю два ключа, продукт будет иметь 6 значений, даже если это разные продукты.

2. @Busilinks Я вас не понимаю. Где вы используете этот массив? При вставке продуктов, при обновлении, при поиске? Я спрашиваю о функциональности, которую вы пытаетесь достичь с помощью этого массива.

3. Массив представляет собой разные варианты одного и того же продукта. Я выбираю атрибуты продукта (размер, цвет и т.д.) и генерирую артикулы продукта в массиве. Итак, [shoe1] => синий, размер 12 — [shoe2] => синий, размер 13. Каждый раз, когда я создаю массив, я бы хотел, чтобы он использовал уникальный идентификатор, чтобы я мог отделять артикулы. Итак, если я использую key [0] каждый раз, когда я создаю массив, я бы эффективно добавлял атрибуты к продукту, который уже существует. Создание уникального ключа решает проблему. В любом случае, я так думаю…

4. @Busilinks Вы хотите сгенерировать все возможные комбинации атрибутов продукта? Опять же, скажите мне, какую функциональность вы пытаетесь достичь с помощью этого.

5. Шеф, спасибо за вашу помощь. Я понял это. Спасибо, что указали мне правильное направление.

Ответ №2:

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

 // inserts records into skus table and creates an array of skuids.
for ($i = 0; $i < $count; $i  ) {
$sql = "INSERT INTO skus (idcodes, dateadded) VALUES ('$cid', '$dateadded')";
$result = mysql_query($sql, $dbc) or die(mysql_error());
$sid = mysql_insert_id();
array_push($skuids, $sid);
}
// creates an array using skuid as the array key and inserts the array into the          skus_options table.
$skus = array_combine($skuids, array_values($skus));
foreach ($skus as $key => $options) {
foreach ($options as $option => $value) {
$query = "INSERT INTO skus_options (skus_options.idskus, skus_options.valueid,   skus_options.idcodes, skus_options.dateadded) VALUES ('$key', '$value', '$cid','$dateadded')";
     $result = mysql_query($query, $dbc) or die(mysql_error());
  }
}