Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.

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.