Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
Zdravím.
Mám problém s objektem, resp. s polem... Mám pole: $a = Array( Array("ID"=>50,"Text"=>"ABC"), Array("ID"=>100,"Text"=>"DEF")); //Převedu ho na objekt - vypadá pak lépe, protože pak výsledek vyvolávám z metody určité třídy. $a = (object)$a; Jak se potom dostanu k prvnímu objektu (kde ID = 50) z objektu $a? Ono totiž $a->0 nejde ... Zkoušel jsem $a->{0} a to mi vrací NULL. |
||
candiess Profil |
#2 · Zasláno: 9. 1. 2013, 18:08:56
TomasJ:
http://stackoverflow.com/questions/1869812/casting-an-array-with-numeric-keys-as-an-object Alias: <?php $a = array('cat','dog','pheasant'); $o = new stdClass; foreach ($a as $k => $v) { if (is_numeric($k)) { $k = "_{$k}"; } $o->$k = $v; } echo $o->_0; //cat ?> |
||
TomasJ Profil |
#3 · Zasláno: 9. 1. 2013, 18:11:38
Toto je opravdu jediný způsob?
|
||
candiess Profil |
#4 · Zasláno: 9. 1. 2013, 18:13:39
TomasJ:
Jak jsi zmínil $a->0 nejde, s řetězovými indexy by to byla prča, ale co se týče těch numerických bude toto asi jediný způsob. |
||
TomasJ Profil |
#5 · Zasláno: 9. 1. 2013, 18:17:42
candiess:
Tak tedy děkuji :) Funguje to jak má. |
||
Tori Profil |
Zkuste si tohle ;)
$a = array('nula', 'jedna', 7 => 'sedm'); $obj = new stdClass; foreach ($a as $key => $val) { $obj->$key = $val; } var_dump($obj); echo '<br>7 = ', $obj->{'7'}; $x = 1; echo "<br>$x = ", $obj->$x; |
||
TomasJ Profil |
#7 · Zasláno: 9. 1. 2013, 18:51:01
Tori:
Nóóó, Tak to je hezčí forma. Takže děkuji moc, použiji ten Váš způsob. Alespoň vidím více možností jak to řešit. Jedině dobře :) |
||
Jan Tvrdík Profil |
Asi by se hodilo stručně vysvětlit, jak je možné, že řešení od Tori funguje.
Je to proto, že PHP neumožňuje přístup k vlastnostem s číselným názvem. PHP pole nemůže obsahovat číselný klíč ve formě řetězce (např. klíč '123' je převeden na 123 ) a při automatickém převodu na objekt jsou datové typy klíčů zachovány.
$pole1 = array('123' => 'foo'); $pole2 = array(123 => 'foo'); // identické s $pole1 var_dump($pole1); var_dump($pole2); $obj1 = (object) $pole1; $obj2 = new stdClass(); $obj2->{123} = 'foo'; // vznikne vlastnost se stringovým názvem var_dump($obj1); var_dump($obj2); Výstup: array(1) { [123]=> string(3) "foo" } array(1) { [123]=> string(3) "foo" } object(stdClass)#1 (1) { [123]=> string(3) "foo" } object(stdClass)#2 (1) { ["123"]=> string(3) "foo" } |
||
TomasJ Profil |
#9 · Zasláno: 9. 1. 2013, 19:25:51
Díky za vysvětlení. Ono mi to už tak nějak došlo podle příkladu od Tori, ale teď to chápu 100%. :)
|
||
Tori Profil |
Jan Tvrdík:
> object(stdClass)#1 (1) { > [123]=> > string(3) "foo" > } Mě tohle zobrazí object(stdClass)[1] string 'foo' (length=3) |
||
Časová prodleva: 11 let
|
0