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