Přetypování ArrayHash na pole

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Lábus
Bronze Partner | 19
+
0
-

Netušíte, proč při přetypování ArrayHash na pole a následnému přístupu k celočíselnému indexu je vyhozeno Notice? Příklad

<?php
$test = \Nette\ArrayHash::from(array(7 => "a", 8 => "b"));
$testArray = (array) $test;
dump($testArray[7]);
?>

Zobrazí se: Notice Undefined offset: 7
Zvláštní je, že při dump($testArray) je vše v pořádku:

<?php
array(2) {
   7 => "a"
   8 => "b"
}
?>

EDIT: upravil jsem názvy proměnných aby se v tom lépe orientovalo

Editoval Lábus (11. 7. 2011 20:31)

srigi
Nette Blogger | 558
+
0
-

A co dump( (array) $test)?

Lábus
Bronze Partner | 19
+
0
-

no právě že dump((array)$test) vrátí pole správně, ale k indexu přistoupit přes hranaté závorky nejde…

David Grudl
Nette Core | 8082
+
0
-

Známý leč bogus bug https://bugs.php.net/bug.php?…

Elijen
Člen | 171
+
0
-

Prave jsem take narazil pri pretypovani „slavneho“ ArrayHash na pole. Nasledujici kod vyhodi „Notice: Undefined index 0“.

$pole = (array) $arrayHash;
foreach($pole as $key => $item) {
   var_dump($pole[$key]);
}

Stoji vubec za takove problemy ten ArrayHash? Nevidim v tom oproti klasickemu poli zadne vyrazne vyhody :-/

Editoval Elijen (6. 12. 2011 15:23)

MIKI
Člen | 34
+
0
-

Preco aspon ta trieda ArrayHash nema metodu toArray()?

Nevedomky moj stary php kod pracoval s tym ako s array, a teraz som po ~20 minutach zistil, ze to je ArrayHash (nacitany z configuracneho suboru), pricom ked som „kopiroval“ pole, tak som len skopiroval odkaz na ArrayHash objekt, ktory po uprave bol iny.

Mozno som to zmatene napisal, tak tu je kod na ukazku:

<?php
    $conf = Nette\Environment::getConfig('debugEmailHeaders');
    $headers = $conf;
    unset($headers['Body'], $headers['DateFormat'], $headers['Subject'], $headers['To']);
    // ocakavam, ze $conf je povodny, a $headers neobsahuje 'Body', 'DateFormat', 'Subject', 'To'
    // vysledok je, ze $conf je rovnaky ako $headers
?>

Editoval MIKI (29. 2. 2012 0:13)

petr.pavel
Člen | 533
+
0
-

Jen tak od boku: nešlo by $headers = iterator_to_array($conf)?
Nebo to naklonovat $headers = clone $conf.

Editoval petr.pavel (29. 2. 2012 15:20)

David Grudl
Nette Core | 8082
+
0
-

$headers = (array) $conf