Přetypování ArrayHash na pole
- Lábus
- Bronze Partner | 19
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)
- Elijen
- Člen | 171
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
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 | 535
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)