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

PHP PHP pole s číselným klíčem typu string American English version English version

Avatar
VelkyBubak
Člen
Avatar
VelkyBubak:

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. srpna 14:22
Avatar
Oxtimus
Člen
Avatar
Oxtimus:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 27. srpna 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.