Какой «индусский код» преобразует массив в реляционную структуру массивов? Имеется вот такой массив - проще говоря - продукт из прайс-листа$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
266 +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 Апр 2024 в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир