Какой «индусский код» преобразует массив в реляционную структуру массивов? Имеется вот такой массив - проще говоря - продукт из прайс-листа$arr = array(
"param1" => "value",
"param2" => "value",
"param3" => array("value", "value2"),
"param4" => array("value", "value2"),
"param5" => "value",
"param6" => array("value", "value2"),
"param7" => "value",
"param8" => array("value", "value2"),
);
Следующим кодом его можно преобразовать в массив для реляционной таблицы param_enum$param_enum = array();
foreach ($arr as $k => $v):
if (is_array($v)):
foreach ($v as $v2):
$param_enum[] = array(
"param" => $k,
"enum" => $v2
);
endforeach;
else:
$param_enum[] = array(
"param" => $k,
"enum" => $v
);
endif;
endforeach;
Ответ будет вот такой:array(
0 => array(
"param" => "param1",
"enum" => "value"
),
1 => array(
"param" => "param2",
"enum" => "value"
),
2 => array(
"param" => "param3",
"enum" => "value"
),
3 => array(
"param" => "param3",
"enum" => "value2"
),
4 => array(
"param" => "param4",
"enum" => "value"
),
5 => array(
"param" => "param4",
"enum" => "value2"
),
6 => array(
"param" => "param5",
"enum" => "value"
),
7 => array(
"param" => "param6",
"enum" => "value"
),
8 => array(
"param" => "param6",
"enum" => "value2"
),
9 => array(
"param" => "param7",
"enum" => "value"
),
10 => array(
"param" => "param8",
"enum" => "value"
),
11 => array(
"param" => "param8",
"enum" => "value2"
)
)
После этого я могу сделать pluck("param") и pluck("enum") и то даже не совсем, нужно будет ассоциативно разбирать enum, чтобы они были уникальны в пределах таблицы param, а не вообще уникальны, чтобы получить уникальные значения для заливки в таблицы `param` и `enum`В ответ на такую заливку я получу ID записей
Вопрос такой - как дальше с помощью нескольких строк кода проставить в массивах соответствия полей по ID?неужели кроме foreach () { array_search() } нет пути проще?
Просто эта задача настолько часто встречается что наверняка кодеры давно придумали хорошее решение, кто подскажет

21 Авг 2019 в 06:33
238 +1
0
Ответы
1

Да, есть более элегантное решение для проставления соответствий полей по ID. Вы можете использовать функцию array_flip(), которая меняет ключи и значения в массиве. В вашем случае, после того, как вы заполните таблицы param и enum и получите их ID, вы можете сделать следующее:

// Предположим, что у вас есть массивы $param_values и $enum_values с соответствующими ID
$param_enum_mapped = array();
foreach ($param_enum as $item) {
$param_enum_mapped[] = array(
"param_id" => $param_values[$item['param']],
"enum_id" => $enum_values[$item['enum']]
);
}

Таким образом, вы создадите массив $param_enum_mapped с соответствиями полей по ID.

20 Апр в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 172 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир