pętla foreach a wyświetlanie konkretnej kolumny

0

Mam taką tablicę:

$dane = array
(
  array('Skoda', 'srebrny', 212000, 'dobry'),
  array('Fiat','czerwony', 98000, 'zły'),
  array('Opel','niebieski', 151000, 'doskonały')
);

Aby wyświetlić jej zawartość stosuję taki kod:

for ($i = 0 ; $i < count($dane) ; $i++)
{
   foreach ($dane[$i] as $klucz => $wartosc)
   {
         {echo "$klucz - $wartosc ";}
   }
   echo "<br>";
}

Zgodnie z przewidywaniami otrzymuję:

0 - Skoda 1 - srebrny 2 - 212000 3 - dobry
0 - Fiat 1 - czerwony 2 - 98000 3 - zły
0 - Opel 1 - niebieski 2 - 151000 3 - doskonały

A teraz chcę wyświetlić tylko marki samochodów. Niewielka modyfikacja i faktycznie działa:

for ($i = 0 ; $i < count($dane) ; $i++)
{
   foreach ($dane[$i] as $klucz => $wartosc)
   {
       ** if ($klucz == 0)**{echo "$klucz - $wartosc ";}
   }
   echo "<br>";
}

Pytanie czy można uzyskać jaki sam efekt nie stosując IFa?
Próbowałem tak, ale nie działa:

for ($i = 0 ; $i < count($dane) ; $i++)
{
   foreach ($dane[$i] as $klucz => $wartosc)
   {
         {echo "$klucz[0] - $wartosc ";}
   }
   echo "<br>";
}
0

Możesz dać inną pętlę niż IF.

while ($klucz == 0)
{
// instrukcje
}

Ale czy to ma sens? Po to masz wyrażenie regulujące kod jak IF aby z niego korzystać a nie szukać sposobu jak to obejść.

3

Po pierwsze od jakiegoś czasu jest już skrócony zapis tablicy w PHP jako []. Nie musisz używać w ogóle for() bo do iteracji po tablicach służy właśnie foreach.
Pętla foreach iteruje po każdym elemencie tablicy. W Twoim przykładzie mamy tablicę tablic.
Można więc zrobić coś takiego:

<?php

$dane = [
    ['Skoda', 'srebrny', 212000, 'dobry'],
    ['Fiat','czerwony', 98000, 'zły'],
    ['Opel','niebieski', 151000, 'doskonały']
];

foreach ($dane as $mainArrayrow){
    foreach ($mainArrayrow as $subArrayKey => $subArrayValue){
        echo $subArrayKey. ":" .$subArrayValue;
    }
}

Czyli iterujemy najpierw po głównej tablicy, a wewnątrz potem po kolejnej tablicy.
Efekt o jakim piszesz możesz uzyskać np. Iterując w ten sposób:

foreach ($dane as $mainArrayrow){
    echo $mainArrayrow[0];
}

Iterujemy po głównej tablicy i wiedząc, że elementem iterowanym jest potem znów tablica odwołujemy się do klucza 0 tej "pod tablicy".

0

Po pierwsze od jakiegoś czasu jest już skrócony zapis tablicy w PHP jako [].

Od której wersji? 7 i wzwyż? Ta tablica z samochodami pochodzi akurat z przykładu, który był prezentowany na serwerze z PHP w wersji 5.x.

0

W ogóle co to za dziwne wstawianie echo w nawiasy? xD

 {echo "$klucz - $wartosc ";}
0

Po lewej był jeszcze warunek do if, który do testów usunąłem ;)

  if ($klucz == 0) {echo "$klucz - $wartosc ";}
0

Wystarczy, że wybierzesz po prostu konkretny klucz.

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