Autor Zpráva
joe
Profil
Ahoj,

můžete mi někdo prosím poradit, jak udělat následující věc?

Mám pole, třeba
$arr = array(
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
);


Záměrně jsem to napsal jako tabulku 6x6. A teď. Tam, bych tuto celou tabulku otočit doprava o 90 stupňů a místo 0 napsat jedničku. Takže výsledek by byl.

$arr = array(
0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
);


Víte prosím někdo jak na to? Díky
Radek9
Profil
joe:
To ale doopravdy není tabulka 6×6. Je to pouze pole s třiceti šesti prvky. Aby to bylo tak, jak říkáte, musel byste to napsat takto:
$array = array(
  array(0, 0, 0, 0, 0, 0),
  array(0, 0, 0, 0, 0, 0),
  array(0, 1, 0, 0, 0, 0),
  array(0, 0, 0, 0, 0, 0),
  array(0, 0, 0, 0, 0, 0),
  array(0, 0, 0, 0, 0, 0)
);
DoubleThink
Profil *
Stackoverflow: Transposing multidimensional arrays in PHP
nightfish
Profil
joe:
Tam, bych tuto celou tabulku otočit doprava o 90 stupňů a místo 0 napsat jedničku.
Těch nul je tam 35, místo které z nich chceš napsat jedničku?
Nebo je to tak, že to pole chceš otočit a "sloučit" s tím původním? (Pod pojmem "sloučit" si představuju operace OR - pokud je alespoň v jedné z těch dvou tabulek - otočené a neotočené - na dané pozici jednička, bude jednička i ve výsledku).
AM_
Profil
Radek9:
To ale doopravdy není tabulka 6×6. Je to pouze pole s třiceti šesti prvky.
Tabulka 6x6 JE pole se 36ti prvky, záleží jak se na to díváš. pokud zavedeš bijekci [x,y]<->[z], kde [z]->[x,y] je [floor(z / 6), z mod 6], vidíš, že se na to dá dívat ekvivalentně.

joe:
Tam, bych tuto celou tabulku otočit doprava o 90 stupňů a místo 0 napsat jedničku.
Jednoduše,
for ($i = 0; $i < 36; $i++)
{
  if ($tabulka[$i] == 1)
  {
    $tabulka2 [6* (z mod 6) + floor (z/6)] = 1; //edit: musíš to cpát do jiné tabulky nebo udělat podobný workaround
  }
}

Tohle by mělo dělat to, co jsi popsal (jestli jsem dobře pohcopil z příkladu, tak tabulku nechceš otočit, ale jakoby provést operaci OR s jejím otočením (tedy jednička je všude, kde byla před nebo po otočení).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: