Wpis z mikrobloga

@smalczyk1: No jeżeli masz jakiś algorytm przypisania wartości, to możesz to robić na switchu, ale po tym co tu załaczyłeś, to ma wrażenie, że najlepiej to zrobić w funkcji rekurencyjnej, bo te zagnieżdżone foreache wyglądają fatalnie
@smalczyk1: obstawiam, że switch ($type) też musi mieć jakąś zewnętrzną pętlę, w której iterujesz po typach.
Może odwróć podejście i zrób sobie pętle po obiektach struktury a wewnątrz pętli zrób te switch ($type) i specyficzne instrukcje dla określonych typów, np.:
foreach (...) {
//wspólne działania
switch ($type)
case ...:
// specyficzne działania dla typu
}
Powinno być sporo mniej pętli.
Ale ogólnie to słabo rozumiem twój przykład z sandboxa, więc nic
@Jare_K: Ogólnie dostaję z api kilka typów movie,book,song.Wszystkie mają taką samą strukturę json.Jednak każdy utwór zależnie od typu ma trafiać do innych tabel w bazie.Każda tabela ma już inne nazwy kolumn dla każdego typu utworu.Chcę stworzyć odpowiednie array dla typu,które będą zawierać wartości które chcę wrzucić do bazy.
Nic nie stoi na przeszkodzie, żeby zrobić tak jak podałem. Będziesz miał kilka pętli po liście obiektów i zbudujesz sobie na koniec każdej iteracji jedno zapytanie do bazy zapisujące w odpowiedniej tabeli, zamiast robić tych zapytań wiele, tyle ile typów porozrzucane po różnych pętlach. W razie konieczności zmian nie będziesz musiał zmieniać wielu miejsc, tylko jedno.
@Jare_K: A może JsonMapper() zmapować najpierw to do obiektu Utwór i potem zależnie od typu tworzyć arrary ?
Book
$insertDataSong['title']=Utówr->title
Movie
$insertDataMovie['orginal-title']=Utwór->title
Song
$insertDataSong['song-title']=Utwór->title
@smalczyk1: Skoro to i tak ma lecieć wprost do bazy, to obiekty (tablice) pośrednie są chyba w ogóle niepotrzebne?
Możesz mapować wprost do zmiennych PDO, np.:
$sth->bindValue(':originalTitle', Utwór->title, PDO::PARAM_STR);
i zależnie od typu w switchu mapować wybrane własności obiektów.
Chyba, że masz ORMa jakiegoś.
@Jare_K: Ok dzięki za ukierunkowanie.Z tym JsonMapper() to myślałem że sam mi odnajdzie wartości po kluczu.Tak to muszę wszystkie obiekty odwzorować w klasach a trochę tego będzie.Tak więc zostanę przy pętlach

versions=>0=>object=>authors
'relationships' =>links=>authors
'relationships' =>links=>magazine

ijeszcze więcej zagnieżdżeń
@smalczyk1: no to już jest o wiele bardziej eleganckie rozwiązanie. Dobry kierunek ( ͡° ͜ʖ ͡°)
Pętle z warunkiem w funkcji createDataByType można lepiej ogarnąć jakimś arrayfilter lub arraywalk.
To:

if($i==0){
$values="('" . implode("', '", $value) . "')";
}else{
$values=$values.",('" . implode("', '", $value) . "')";
}

możesz zastąpić:

przed pętlą:
$values = [];
w pętli:
$values[] = "('" . implode("', '", $value) . "')";