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

PHP - jak wypisać tablicę asocjacyjną

VPS Starter Arubacloud
0 głosów
454 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ź 184 wizyt
pytanie zadane 13 września 2017 w PHP przez bwl Obywatel (1,530 p.)
+1 głos
1 odpowiedź 213 wizyt
pytanie zadane 18 grudnia 2022 w C i C++ przez Krloo Początkujący (480 p.)
0 głosów
1 odpowiedź 295 wizyt
pytanie zadane 4 czerwca 2019 w C i C++ przez Kaper99 Użytkownik (660 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...