Hodnota písmene „i“ v podmínce?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Hafran
Člen | 121
+
0
-

Zdravím, narazil jsem na malou nesrovnalost, kterou zaboha nemůžu pochopit. Byl bych rád kdyby mi to zkušenější programátor vysvětlil:

v Session mám uložen nákupní košík. Klíč pole tvoří pouze čísla (id) objednávek a „i“.
Dump:

array(4) {
   i => 3
   0 => array(3) {
     }
   1 => array(3) {
      }
   2 => array(3) {
      }
}

V presenteru tvořím formulář kde pro každou položku vytvořím jeden „text“ a vynechávám samozřejmě index „i“.

foreach ($this->context->cart->getItems() as $id => $item) {
			if ($id != "i") {

				$form->addText("code_" . $id, '')
						->getControlPrototype()->class('code')
			}
		}

Když použiji tuhle podmínku, aby mi to při smyčce vynechalo „i“

if ($id != "i") {

vynechá mi to i položku s číslem 0

musím tedy použít

if ($id !== "i") {

což vůbec nechápu proč? Z jakého důvodu bere program i==0? Očekávám že hodnotu bere jako boolean ale chtěl bych vědět proč, jenžto bylo docela složité chybu najít. ;)

Jan Endel
Člen | 1016
+
0
-

Pravěpodobně je to tak proto, že klíče pole ve foreach jsou defaultně považovány za čísla (tím si nejsem jist) a tedy i se převede na číselnou reprezentaci (0). Jenom můj názor, možná mě někdo opraví.

Nox
Člen | 378
+
0
-

Vím že jsem OT, ale doporučuju používat smysluplnější klíče než „i“ … za týden nebudeš vědět co „i“ znamená

Caine
Člen | 216
+
0
-

A co třeba zkusit přímo manual: http://www.php.net/…mparison.php

If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. These rules also apply to the switch statement. The type conversion does not take place when the comparison is === or !== as this involves comparing the type as well as the value.

Hafran
Člen | 121
+
0
-

Caine,pilec: Vida, díky moc, zase jsem o něco chytřejší! ;)
Nox: „i“ je iterátor se stejnou důležitostí a funkcí jako $i ve for-loop. Už si nedokážu ani představit jiné písmenko. ;)

Nox
Člen | 378
+
0
-

Tak ve for člověk vidí, že je to iterátor, v session to imho vůbec není jasné…ale už zmlknu