Názory ke článku PHP a XML-RPC
2. 1. 2011
V danem kodu vidim hned dve chyby. Jednu ve volani funkce range(), kde je horni index pretazen o jednicku a druhou v porovnavani klicu poli. Pole $array nemusi mit klice serazeny a porovnavani pak neprojde, prestoze pole odpovida pozadavku na uplnou vzestupnou radu celocislenych klicu. Netestoval jsem, ale navrhuju aspon tuto zakladni zmenu
$length = count($array);
$range = range(0, $length - 1);
$keys = array_keys($array);
sort($keys);
if ($keys == $range) {
for ($index = 0; $index < $length; $index ++) {
$val = $array[$index];
$new[] = fixXmlrpcArgs($val);
} else {
Reagoval na komentář od uživatele lachtan :
Ahoj Lachtane, s přetažením máš pravdu, děkuji za upozornění, omlouvám se a opravuji.
Reagoval na komentář od uživatele lachtan :
S druhou chybou nesouhlasím. Ve chvíli, kdy nemám lienární pořadí klíčů, pak je to asi z nějakého důvodu. Samozřejmě ne vždy potřebný. Příklad této situace: seřadím si pole dle hodnot a chci zachovat klíče (které např. mohou být identifikátorem). Nicméně ztracením těchto klíčů může dojít k mnohem zásadnější problémům. Pokud klíče nepotřebuji, není nic snažšího než předat array_values($args);
4. 1. 2011
Reagoval na komentář od uživatele Jan Škrášek :
To je sice pravda, ale pokud nemám lineárni pole kličů, nemužu ho převést na čistokrevné pole v XML-RPC. Takové pole bych tedy spíš převedl jako hash (dict). Šlo mi jen o tuto důslednou kontrolu, kdy PHP array můžu převést na XML-RPC pole a kdy ne. Což myslím moje ukázka řeší :)
24. 4. 2012
Dalsi chyba - selze to pro jednorozmerne pole s textovym indexem, napriklad
array('key'=>'neco')
Fix:
if (array_keys($array) == $range) { # just array
Nahradit:
if (array_keys($array) === $range) { # just array, === is required here