gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Какой «индусский код» преобразует массив в реляционную структуру массивов?

Имеется вот такой массив - проще говоря - продукт из прайс-листа
$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() } нет пути проще?

Просто эта задача настолько часто встречается что наверняка кодеры давно придумали хорошее решение, кто подскажет
  • Вопрос задан
  • 508 просмотров
Пригласить эксперта
Ответы на вопрос 1
gzhegow
@gzhegow Автор вопроса
aka "ОбнимиБизнесмена"
Пока актуальный вариант - ни о какой универсальности еще нет речи, используйте на свой страх и риск
Скачать исходник: --временно_недоступно--

Код получился жирноватый, так что готовьте сигары и попкорн
Картинка с результатами: https://www.screencast.com/t/nF8qygECj
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы