Práce s dvourozměrným polem

Ahoj, měl bych 2 otázečky :-)

1. jak správně zapsat:

$figurka['1']['1'] = 0;
$figurka['1']['2'] = 0;
$figurka['1']['3'] = 0;
$figurka['1']['4'] = 0;
$figurka['2']['1'] = 0;
$figurka['2']['2'] = 0;
$figurka['2']['3'] = 0;
$figurka['2']['4'] = 0;
$figurka['3']['1'] = 0;
$figurka['3']['2'] = 0;
$figurka['3']['3'] = 0;
$figurka['3']['4'] = 0;
$figurka['4']['1'] = 0;
$figurka['4']['2'] = 0;
$figurka['4']['3'] = 0;
$figurka['4']['4'] = 0;

a jak docílit toho, že bych se zeptal (pomocí php) jestli nějaká hodnota toho pole (všech figurek) se rovná nějakému číslu a ono by vypsalo všechny ty figurky i s obouma parametrama. S dvojrozměrným polem dělám poprvý, takže se moc nevyznam :-)

PS: dělám náhodně generované člověče nezlob se a řeším vyhazování figurek, kdyby měl někdo zájem tak rozpracovanej k´d je na nesro.wz.cz/cry
tak zkus treba pomoci

function obsahujeHodnotu($figurka){
while (list(, $value) = each ($figurka)) {
while (list(, $value2) = each ($value))
if($value2==$hledane){
return true;
}
}
}
return false;
}

psal jsem to z patra tak nevim jeslti neni nekde preklep :) jinak bys mohl while nahradit foreach , ale foreach bych rekl ze je malinko narocnejsi na pamet (vytvari druhe duplicitni pole-nelze v prubehu foreach menit hodnoty pole :) )...
for($i=1;$i<=4;$i++) {
for($j=1;$j<=4;$j++) {
$figurka[$i][$j] = 0;
}
}

Toto je zakladni cyklus pro dvourozmerne pole. Tento priklad zpusobi vynulovani vsech hodnot, tedy ten prvni priklad.

Pro zjistovani/upravy hodnot pole (pozice figurky), muzes pouzit primy zapis (pokud vis indexy): echo "2.figurka 1.hrace je na pozici ". $figurka[1][2];
Nebo pouzit vyse uvedeny cyklus (pokud nevis indexy). Tim, ze dovnitr druheho cyklu pouzijes odpovidajici algoritmy/podminky.
Treba pro zjisteni, ktere figurky jsou na dane pozici:

for($i=1;$i<=4;$i++) {
for($j=1;$j<=4;$j++) {

if($figurka[$i][$j] == $pozice) echo "Na pozici $pozice je hrac $i s figurkou $j";

}
}

A tak dale. Proste tady mas nejaky zaklad ;)
dik moc

Tomík: Tvuj script by měl vypysovat $figurka[1][1] (třeba), vadí hodně, že to neni $figurka['1']['1'] ? nebo je ten druhý zápis špatně?

btw: že to bude jednoduchý sem čekal, ale že takhle :D
Pokud ocekavas jen cislo, tak uvozovky nemusi byt. U retezce uz uvozovky byt musi.
dik
"že to bude jednoduchý sem čekal, ale že takhle"
A co jsi čekal? Práce s poli je jednoduchá sama o sobě ;)
<HTML>Freeze: "jinak bys mohl while nahradit foreach , ale foreach bych rekl ze je malinko narocnejsi na pamet (vytvari druhe duplicitni pole-nelze v prubehu foreach menit hodnoty pole :) )..."


Ono je to v podstate trosku jinak.
Duplicitni pole se nevytvari (neni duvod), pouze precte klic a hodnotu prvku a vlozi je do promennych (i kdyz ve vicerozmernem poli ano, vytvori promennou jako pole)
Nicmene i hodnoty pole lze v prubehu menit pomoci reference (neni automaticka):

foreach ($pole as &$value) {
$value = $value * 2;
}

a je to mozna lepsi, protoze z hlediska bezpecnosti si tak kazdy musi urcit zda chce hodnoty menit a "vice si to uvedomuje" nez kdyby se jednalo o referenci automaticky</HTML>
Ještě mě zarazila jedna věc. Tomík napsal:

echo "Na pozici $pozice je hrac $i s figurkou $j";

a já to už automaticky přepsal na:

echo 'Na pozici '.$pozice.' je hrac '.$x.' s figurkou $y';

dělam to špatně, nebo je to jedno? Jen abych si nezvykal (protože PHP neumim) na špatný věci :-)
Nevim jak ostatní, ale já preferuju skládání řetězců pomocí teček (tak jak jsi napsal ... ).
echo 'Na pozici '.$pozice.' je hrac '.$x.' s figurkou '.$y;
//ale možná to ostatní vidí jinak ;)

=Richard=
doted jsem zil v domeni, ze foreach nedonutis upravovat puvodni hodnoty pole ani pomoci & ... celkem mi to vyplývá mimochodem uz i z tohoto Notice z cz.php.net (cituji):
"Poznámka: Uvědomte si také, že foreach pracuje na kopii specifikovaného pole, nikoli na poli samotném, proto ukazatel na pole není modifikován tak, jako příkazem each() a změny na vráceném elementu se na původním poli neprojeví."
<HTML>"doted jsem zil v domeni, ze foreach nedonutis upravovat puvodni hodnoty pole ani pomoci &"

A taky jsi se nemýlil, ale <b>doporučuji</b> (důrazně) nespoléhat na český překlad PHP manuálu, téměř u každé funkce tam něco není a většinou vždy to důležité. V tomto případě:
"As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value."

Mohl jsem se zmínit o tom že v php4 to nešlo, ale php4 už není a v nejbližší době i WZ přejde na PHP5, takže důležité je to, že v php to jde (a když dnes říkám php, myslím php5)</HTML>
Super, doufam, ze bude PDO a SQLite :)
Sry za OT