NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: pole s číselným klíčem typu string

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
VelkyBubak
Člen
Avatar
VelkyBubak:27.8.2016 14:22

mám pole

array('1'=>'0','2'=>'0','3'=>'0','4'=>'0','5'=>'0','6'=>'0','7'=>'0','8'=>'0','9'=>'0', 'Á'=>'A','Č'=>'C','Ď'=>'D','É'=>'E','Ě'=>'E','Í'=>'I','Ň'=>'N','Ó'=>'O','Ř'=>'R','Š'=>'S','Ť'=>'T','Ú'=>'U','Ů'=>'U','Ý'=>'Y','Ž'=>'Z');

a potřeboval bych aby číselné hodnoty byly typu string - takto se načtou jako integer a písmena jako string
Lze toho nějak dosáhnout?

 
Odpovědět
27.8.2016 14:22
Avatar
Michal
Člen
Avatar
Michal:27.8.2016 14:54

Z toho, co jsem zjistil, to možné není. PHP automaticky převede veškeré číselné klíče na integer.

$array = array('1'=>'0','2'=>'0','3'=>'0','4'=>'0','5'=>'0','6'=>'0','7'=>'0','8'=>'0','9'=>'0', 'Á'=>'A','Č'=>'C','Ď'=>'D','É'=>'E','Ě'=>'E','Í'=>'I','Ň'=>'N','Ó'=>'O','Ř'=>'R','Š'=>'S','Ť'=>'T','Ú'=>'U','Ů'=>'U','Ý'=>'Y','Ž'=>'Z');

$values = array_values($array);
$keys =  array_map('strval', array_keys($array));

$stringArray = array_combine($keys, $values); // Ve skutečnosti jsou klíče stále číselné

Šlo by to ovšem obejít tak, že by si na začátek každého klíče přidal 0 jakožto neutrální znak.

$array = array('1'=>'0','2'=>'0','3'=>'0','4'=>'0','5'=>'0','6'=>'0','7'=>'0','8'=>'0','9'=>'0', 'Á'=>'A','Č'=>'C','Ď'=>'D','É'=>'E','Ě'=>'E','Í'=>'I','Ň'=>'N','Ó'=>'O','Ř'=>'R','Š'=>'S','Ť'=>'T','Ú'=>'U','Ů'=>'U','Ý'=>'Y','Ž'=>'Z');

$values = array_values($array);
$keys =  array_map(function($string) {return '0' . $string;}, array_keys($array));

$stringArray = array_combine($keys, $values);

Od teď budou všechny klíče ve tvaru '01', '02', ... '0Z', což nezmění celkové pořadí (0 bude u všech klíčů) a zároveň se zařídí, že všechny klíče budou typu string. Takto bude to poslední pole vypadat:

array(24) { ["01"]=> string(1) "0" ["02"]=> string(1) "0" ["03"]=> string(1) "0" ["04"]=> string(1) "0" ["05"]=> string(1) "0" ["06"]=> string(1) "0" ["07"]=> string(1) "0" ["08"]=> string(1) "0" ["09"]=> string(1) "0" ["0Á"]=> string(1) "A" ["0Č"]=> string(1) "C" ["0Ď"]=> string(1) "D" ["0É"]=> string(1) "E" ["0Ě"]=> string(1) "E" ["0Í"]=> string(1) "I" ["0Ň"]=> string(1) "N" ["0Ó"]=> string(1) "O" ["0Ř"]=> string(1) "R" ["0Š"]=> string(1) "S" ["0Ť"]=> string(1) "T" ["0Ú"]=> string(1) "U" ["0Ů"]=> string(1) "U" ["0Ý"]=> string(1) "Y" ["0Ž"]=> string(1) "Z" }
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
27.8.2016 14:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.