Имеется вот такой массив - проще говоря - продукт из прайс-листа
$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() } нет пути проще?
Просто эта задача настолько часто встречается что наверняка кодеры давно придумали хорошее решение, кто подскажет