• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP - jak wypisać tablicę asocjacyjną

Object Storage Arubacloud
0 głosów
471 wizyt
pytanie zadane 23 września 2019 w PHP przez BlvckFox Gaduła (4,240 p.)

Cześć, mam taką tablicę:

$results = [
	[
		"company"=>"Sony",
		"type"=>"Phones",
		"name"=>"Xperia 1",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"Phones",
		"name"=>"Xperia 2",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"Phones",
		"name"=>"Xperia 3",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"Phones",
		"name"=>"Xperia 5",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"Phones",
		"name"=>"Xperia 10",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"Phones",
		"name"=>"Xperia 11",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"Phones",
		"name"=>"Ericson",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"tv",
		"name"=>"LED KD-55XF9005",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Sony",
		"type"=>"tv",
		"name"=>"LED KD-5405X5",
		"desc"=>"Some description…"
	],
	[
		"company"=>"Xiaomi",
		"type"=>"Phones",
		"name"=>"Redmi Note 5",
		"desc"=>"Some description…"
	]
]

A potrzebuje ją wypisać, żeby wyglądało to mniej więcej tak: 

Jak to można zrobić? Muszę przerobić tą tablice żęby jakoś łatwiej użyć foreach, podzielić tą jedną na parę mniejszych czy coś w tym stylu?

2 odpowiedzi

+1 głos
odpowiedź 23 września 2019 przez suice Gaduła (3,960 p.)
wybrane 23 września 2019 przez BlvckFox
 
Najlepsza

na pewno mozna zrobic to w duzo bardziej elegancki sposób, ale na szybko:

$devices = [];

foreach($resultDevices as $resultDevice)
{
    $companyName = $resultDevice['company'];
    $typeName = $resultDevice['type'];
    
    unset($resultDevice['company']);
    unset($resultDevice['type']);
        
    $devices[$companyName][$typeName][] = $resultDevice;
}

var_dump($devices);

wynik:

array(2) {
  ["Sony"]=>
  array(2) {
    ["Phones"]=>
    array(7) {
      [0]=>
      array(2) {
        ["name"]=>
        string(8) "Xperia 1"
        ["desc"]=>
        string(19) "Some description…"
      }
      [1]=>
      array(2) {
        ["name"]=>
        string(8) "Xperia 2"
        ["desc"]=>
        string(19) "Some description…"
      }
      [2]=>
      array(2) {
        ["name"]=>
        string(8) "Xperia 3"
        ["desc"]=>
        string(19) "Some description…"
      }
      [3]=>
      array(2) {
        ["name"]=>
        string(8) "Xperia 5"
        ["desc"]=>
        string(19) "Some description…"
      }
      [4]=>
      array(2) {
        ["name"]=>
        string(9) "Xperia 10"
        ["desc"]=>
        string(19) "Some description…"
      }
      [5]=>
      array(2) {
        ["name"]=>
        string(9) "Xperia 11"
        ["desc"]=>
        string(19) "Some description…"
      }
      [6]=>
      array(2) {
        ["name"]=>
        string(7) "Ericson"
        ["desc"]=>
        string(19) "Some description…"
      }
    }
    ["tv"]=>
    array(2) {
      [0]=>
      array(2) {
        ["name"]=>
        string(15) "LED KD-55XF9005"
        ["desc"]=>
        string(19) "Some description…"
      }
      [1]=>
      array(2) {
        ["name"]=>
        string(13) "LED KD-5405X5"
        ["desc"]=>
        string(19) "Some description…"
      }
    }
  }
  ["Xiaomi"]=>
  array(1) {
    ["Phones"]=>
    array(1) {
      [0]=>
      array(2) {
        ["name"]=>
        string(12) "Redmi Note 5"
        ["desc"]=>
        string(19) "Some description…"
      }
    }
  }
}

 

komentarz 23 września 2019 przez BlvckFox Gaduła (4,240 p.)
Faktycznie, tablica jest taka jaką chciałem, ale jak ją dobrze wypisać?
1
komentarz 23 września 2019 przez suice Gaduła (3,960 p.)
$outPut = '';

foreach($devices as $companyName => $devicesByType)
{
    $outPut .= 'Company name: ' . $companyName . PHP_EOL;
    
    foreach($devicesByType as $type => $devices) {
        $outPut .= 'Type: ' . $type . PHP_EOL;

        foreach($devices as $device)
        {
            $outPut .= 'Model: ' . $device['name'] . PHP_EOL;
            $outPut .= 'Description: ' . $device['desc'] . PHP_EOL;
            $outPut .= PHP_EOL;
        }
    }
    
    $outPut .= PHP_EOL;
}

echo $outPut;

 

–1 głos
odpowiedź 23 września 2019 przez adam_jankowski Mądrala (5,970 p.)
foreach($results as $tablica)
{
 
//np:
echo '<h1>'.$tablica["company"].'</h1'>
...
//wypisze wszystkie nazwy firm, w nagłówkach
// W miejsce kropek piszesz kolejne echa z $tablica['']

}

 

komentarz 23 września 2019 przez BlvckFox Gaduła (4,240 p.)
Wiem jak odwołać się do wartości w tablicy asocjacyjnej, to nie rozwiązuje żadnego problemu.
komentarz 27 września 2019 przez tangel Nowicjusz (100 p.)

Witam,

Czy zatem nie powinieneś zrobić tego w arkuszach stylów ?

$i = 1;
foreach($results as $tablica)
{
  
//np:
echo "<div id=blok_$i>;
echo '<h1>'.$tablica["company"].'</h1'>
...
echo "</div>";
$i++;
//wypisze wszystkie nazwy firm, w nagłówkach
// W miejsce kropek piszesz kolejne echa z $tablica['']
 
}

I potem odpowiednie style w css ?

Podobne pytania

0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 13 września 2017 w PHP przez bwl Obywatel (1,530 p.)
+1 głos
1 odpowiedź 242 wizyt
pytanie zadane 18 grudnia 2022 w C i C++ przez Krloo Początkujący (480 p.)
0 głosów
1 odpowiedź 301 wizyt
pytanie zadane 4 czerwca 2019 w C i C++ przez Kaper99 Użytkownik (660 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...