Portál AbcLinuxu, 12. května 2025 15:39

Dotaz: Oříšek pro otrlé mazáky - Jak v php nadefinovat pole z define

30.10.2013 19:34 Horde
Oříšek pro otrlé mazáky - Jak v php nadefinovat pole z define
Přečteno: 744×
Odpovědět | Admin
Dobrý večer. Potřebuji poradit, jak nastavit foreach abych dostal požadované pole viz příklad dole. Může někdo pomoci?
     define('BEDNA_KEY', 'bedna');
     define('BEDNA_CLA', '1111');
     define('BEDNA_TIT', '988777');

     define('KNIHA_KEY', 'kniha');
     define('KNIHA_CLA', '3447');
     define('KNIHA_TIT', '537');

     define('SKLO_KEY', 'sklo');
     define('SKLO_CLA', '78');
     define('SKLO_TIT', '177');

     $arr1 = array(BEDNA_KEY, KNIHA_KEY, SKLO_KEY);

     $array = array();

     foreach ($arr as $key => $value){
          $array[$key] = array('cla' => ???, 'tit' => ???); //nevím jak s tímto řádkem hnout
     }

     /*Potřebuji takto nadefinovat pole tím cyklem*/
     $array = array(BEDNA_KEY => array('cla' => BEDNA_CLA, 'tit' => BEDNA_TIT),
                    KNIHA_KEY => array('cla' => KNIHA_CLA, 'tit' => KNIHA_TIT),
                    SKLO_KEY  => array('cla' => BEDNA_CLA, 'tit' => SKLO_TIT));
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.10.2013 09:43 RYU.cz | skóre: 16 | Vsetín
Rozbalit Rozbalit vše Re: Oříšek pro otrlé mazáky - Jak v php nadefinovat pole z define
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud potřebuješ načíst obsah oné konstanty, tak použij fci http://php.net/manual/en/function.constant.php. Název konstanty prostě poskládáš.
Linux is like a teepee - no windows, no gates, apache inside. | RYU.cz
1.11.2013 18:27 mano | skóre: 9
Rozbalit Rozbalit vše Re: Oříšek pro otrlé mazáky - Jak v php nadefinovat pole z define
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ak je to ešte stále aktuálne, tak tu máš vzorové riešenie - je to zbúchané za behu, takže som dbal len na funkčnosť, nie efektívnosť...
<?php

define('BEDNA_KEY', 'bedna');
define('BEDNA_CLA', '1111');
define('BEDNA_TIT', '988777');

define('KNIHA_KEY', 'kniha');
define('KNIHA_CLA', '3447');
define('KNIHA_TIT', '537');

define('SKLO_KEY', 'sklo');
define('SKLO_CLA', '78');
define('SKLO_TIT', '177');


function get_constant_base_name($val) {

	$defined_constants=get_defined_constants(true);
	foreach ($defined_constants['user'] as $const_name => $value) {
		if ($value == $val && substr($const_name, -4) == '_KEY') {
			return substr($const_name, 0, -4);
		}
	}
	
	return NULL;
}



$arr1 = array(BEDNA_KEY, KNIHA_KEY, SKLO_KEY);
$new_array = array();

foreach ($arr1 as $value){
	if ($key = get_constant_base_name($value)) {
		$new_array[$value] = array(
				'cla' => constant($key.'_CLA'),
				'tit' => constant($key.'_TIT')
		);
	}
}


print_r($new_array);

?>
Jeden komentár k tomu - musíš si v tomto prípade dávať pozor na názvy konštánt, pretože sa môže stať, že budeš mať definované 2 konštanty *_key s rovnakou hodnotou, napr.:
define('BEDNA_KEY', 'bedna');
define('MALA_BEDNA_KEY', 'bedna');
tak v tomto prípade nemáš možnosť deterministicky určiť o ktorú z konštánt sa jedná - vhodnejšou voľbou je potom definovať $arr1 ako
$arr1 = array('BEDNA', 'KNIHA', 'SKLO');

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.