Przechowywanie zagnieżdżonych tablic w bazie

0

Potrzebuję stworzyć taką tablicę i wstawić do bazy danych:

Mam powiedzmy 4 imiona

Każde imię ma w sobie imiona + wiek

czyli:

$ludzie = array(
  array("Ola" => array("Kasia" => "23", "Romek" => "43", "Romek" => "34")),
  array("Marcin" => array("Ola" => "23", "Filip" => "43", "Andrze" => "34")),
  array("Maciek" => array("Ola" => "23", "Ola" => "43")),
  array("Kasia" => array("Derek" => "23", "Romek" => "43", "Romek" => "34"))
);

echo json_encode($ludzie);

a później wyciągnąć z bazy danych i wycignąć tylko tablicę ostateczną czyli na przykłąd array("Ola" => array("Kasia" => "23", "Romek" => "43", "Romek" => "34")) - oczywiście po json_decode().

Chyba ze da się to zrobić łatwiej i drugi problem - usuwają się powtarzalne klucze które muszą być i kolejność tych wartości i kluczy też musi pozostać tak jak jest teraz. Pomożecie?

1

Pytasz o model danych w bazie ?

"imiona"  ID, Imie, Wiek
"ludzie"  ID, Nazwa
"imiona_ludzie" ID, FK_imiona, FK_ludzie


== "ludzie" ==
1|Ola
2|Marcin
3|Maciek
4|Kasia

== "imiona"==
1| "Kasia" | "23",
2| "Romek" | "43",
3|  "Romek" | "34",
itd...

== "imiona_ludzie" ==
1| 1 |1
2| 2 |1
3| 3 |1
.... itd
0

pytam o to czy budowa tablicy jest prawidłowa i jak z tablicy wyciągnąć w php najgłębszą tablicę.

1
DuzaCzarna napisał(a):

Potrzebuję stworzyć taką tablicę i wstawić do bazy danych:

Mam powiedzmy 4 imiona

Każde imię ma w sobie imiona + wiek

czyli:

$ludzie = array(
  array("Ola" => array("Kasia" => "23", "Romek" => "43", "Romek" => "34")),
  array("Marcin" => array("Ola" => "23", "Filip" => "43", "Andrze" => "34")),
  array("Maciek" => array("Ola" => "23", "Ola" => "43")),
  array("Kasia" => array("Derek" => "23", "Romek" => "43", "Romek" => "34"))
);

echo json_encode($ludzie);

a później wyciągnąć z bazy danych i wycignąć tylko tablicę ostateczną czyli na przykłąd array("Ola" => array("Kasia" => "23", "Romek" => "43", "Romek" => "34")) - oczywiście po json_decode().

Chyba ze da się to zrobić łatwiej i drugi problem - usuwają się powtarzalne klucze które muszą być i kolejność tych wartości i kluczy też musi pozostać tak jak jest teraz. Pomożecie?

Ciężko się domyślić co chcesz zrobić. Jeśli wsadzasz rzeczy do bazy danych, to możesz oczywiście wsadzić w JSON'ie, ale możesz też w relacjach i tabelach.

Wszystko się sprowadza do tego co tak na prawdę chcesz zrobić, możesz nam przybliżyć problem który chcesz rozwiązac?

0

Jak Tobie koncepcja tablica w tablicy pasuje to trudno zaproponować coś innego bez kontekstu a my tu mamy nakreślony tylko taki kontekst jak go nam opiszesz.
Spróbuj przeczytać tekst i spróbuj zasymilować sytuacje że nie jesteś w swoim projekcie , zwróć uwagę że słowa są wieloznaczne

0

ok, załóżmy ze na razie nie konwertujemy tego do json i mam taką tablicę

> $ludzie = array(
>   array("Ola" => array("Kasia" => "23", "Romek" => "43")),
>   array("Marcin" => array("Ola" => "23", "Filip" => "43")),
>   array("Maciek" => array("Ola" => "23", "Ola" => "43")),
>   array("Kasia" => array("Derek" => "23", "Romek" => "43"))
> );

i niżej chce wyciągnąć dane z tej tablicy w pętli:

<?php
$policz_wszystkie_glowne_tablice = count($ludzie);   // tu wynik 4 w tym przypadku

for($i = 0; $i < $policz_wszystkie_glowne_tablice; $i++) {

  $ten_klucz = key(ludzie()[$i]);   // dzieki temu otrzymuje klucz każdej tablicy czyli: "ola", "marcin", "maciek", "kasia"
  
  $podtablica = podtablica("OLA") /* TU MAM PROBLEM JAK WSTAWIC DO ZMIENNEJ "podtablica" całą podtablicę której kluczem jest Ola itd 
 mając takie coś w zmiennej będę mógł sobie wyciągnąć dalsze dane - w tym przypadku Kasie i jej wiek oraz Romka i jego wiek */
   
}
0
DuzaCzarna napisał(a):

ok, załóżmy ze na razie nie konwertujemy tego do json i mam taką tablicę

> $ludzie = array(
>   array("Ola" => array("Kasia" => "23", "Romek" => "43")),
>   array("Marcin" => array("Ola" => "23", "Filip" => "43")),
>   array("Maciek" => array("Ola" => "23", "Ola" => "43")),
>   array("Kasia" => array("Derek" => "23", "Romek" => "43"))
> );

To możesz zrobić tak:

<?php

foreach ($ludzie as $firstPerson => $people) {
  foreach ($people as $secondPerson => $value) {

    var_dump($firstPerson);
    var_dump($secondPerson);
    var_dump($value);
  }
}
0

dziękuję za pomoc ale metodami prób i błędów znalazłem rozwiązanie które mnie bardziej satysfakcjonuje i może się komuś przyda, zatem:

$encode_ludzie = json_encode($ludzie);   
$decode_ludzie = json_decode($encode_ludzie); 

$policz = count($ludzie);
for($i = 0; $i < $policz; $i++) {
  $ten_klucz = key($ludzie[$i]);   
  $ta_tabela = json_decode(json_encode($ludzie[$i]), true);
  $ta_podtabela = $this_table[$this_key];				   				
}
0
DuzaCzarna napisał(a):

dziękuję za pomoc ale metodami prób i błędów znalazłem rozwiązanie które mnie bardziej satysfakcjonuje i może się komuś przyda, zatem:

$encode_ludzie = json_encode($ludzie);   
$decode_ludzie = json_decode($encode_ludzie); 

$policz = count($ludzie);
for($i = 0; $i < $policz; $i++) {
  $ten_klucz = key($ludzie[$i]);   
  $ta_tabela = json_decode(json_encode($ludzie[$i]), true);
  $ta_podtabela = $this_table[$this_key];				   				
}

Po co robisz json_encode() i json_decode() zaraz po sobie na tych samych danych?

0
$policz = count($ludzie);
for($i = 0; $i < $policz; $i++) {
  $ten_klucz = key($ludzie[$i]);   
  $ta_tabela = json_decode(json_encode($ludzie[$i]), true);
  $ta_podtabela = $this_table[$this_key];				   				
}

ok, już nie ma tego błędy :) więc nie ma potrzeby kodowania i rozkodowywania ;)

0
DuzaCzarna napisał(a):
$policz = count($ludzie);
for($i = 0; $i < $policz; $i++) {
  $ten_klucz = key($ludzie[$i]);   
  $ta_tabela = json_decode(json_encode($ludzie[$i]), true);
  $ta_podtabela = $this_table[$this_key];				   				
}

ok, już nie ma tego błędy :) więc nie ma potrzeby kodowania i rozkodowywania ;)

Ale zrobienie na czymś json_decode(json_encode($ludzie[$i]), true), powinno być tożsame z po prostu zwróceniem $ludzie[$i].

Więc Twój kod albo nie ma sensu, i można go wywalic; albo robi coś niejawnie (np zamienia null na [] albo usuwa nieserializowalne typy np resource).

0
$policz = count($ludzie);
for($i = 0; $i < $policz; $i++) {
  $ten_klucz = key($ludzie[$i]);   
  $ta_tabela = $ludzie[$i];
  $ta_podtabela = $this_table[$this_key];				   				
}

ok - wyjdę na jakiegoś ... faktycznie to nie było potrzebne i kod działa prawidłowo tak jak potrzebuję :)

1
DuzaCzarna napisał(a):
$policz = count($ludzie);
for($i = 0; $i < $policz; $i++) {
  $ten_klucz = key($ludzie[$i]);   
  $ta_tabela = $ludzie[$i];
  $ta_podtabela = $this_table[$this_key];				   				
}

ok - wyjdę na jakiegoś ... faktycznie to nie było potrzebne i kod działa prawidłowo tak jak potrzebuję :)

Tylko że nie potrzebujesz zmiennej $policz, więc można to skrócić do tego:

for($i = 0; $i < count($ludzie); $i++) {
  $ten_klucz = key($ludzie[$i]);   
  $ta_tabela = $ludzie[$i];
  $ta_podtabela = $this_table[$this_key];				   				
}

Masz tablice asocjacyjną, więc można iterować po kluczach, zamiast po indexach.

foreach (array_keys($ludzie) as $ten_klucz) {
  $ta_tabela = $ludzie[$i];
  $ta_podtabela = $this_table[$this_key];				   				
}

A skoro tak, to możesz po prostu iterować po wartościach:

foreach ($ludzie as $ten_klucz => $ta_tabela) {

  $ten_klucz; // zrób co chcesz
  $ta_tabela; // zrób co chcesz  				
}

Cały Twój kod można zastąpić prostym foreach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1