přidání prvků v asociativním poli
- Webster.K
- Člen | 212
Zdravím všechny, vím že tohle se týká spíše mé neznalosti PHP než samotného Nette, ale brání mi to v pokračování :D potřebuji dostat do asociativního pole data. Mám třeba toto pole:
$pole['2017-04-04'] = array('datum'=>'2017-04-04','hodnoty'=>array('hodnoty tohoto data'));
$pole['2017-04-05'] = array('datum'=>'2017-04-05','hodnoty'=>array('hodnoty tohoto data'));
Jak dokážu udělat to, abych mohl někdy v dalším cyklu k tomu datu přidat další hodnoty? Buď mi je to přepíše, nebo když dám .= popř += to hodí že ještě neexistuje, což při ověření jestli neexistuje
if($pole['2017-04-04'])
hodí že neexistuje :D
- iNviNho
- Člen | 352
Pre inšpiráciu :)
<?php
// init
$dates = [];
// if key doesnt exist, create array on certain key
// nepovinne, iba pre info a pre zodpovedanie ako zistiť, či je key vytvorený
if (!array_key_exists("2017-04-04", $dates)) {
$dates["2017-04-04"] = [];
}
// fill certain array in key with datas
$dates["2017-04-04"][] = "hodnota1";
$dates["2017-04-04"][] = "hodnota2";
$dates["2017-04-04"][] = "hodnota3";
?>
A ešte pár vecí:
Pole som zvyknutý zapisovať ako [], je to rýchlejšie a pre mna krajšie ako
array();
Zapisuješ do pola takto:
<?php
// init
$pole = [];
// pridavanie
$pole[] = "prva hodnota";
$pole[] = "druha hodnota";
?>
Editoval iNviNho (26. 5. 2017 13:51)
- CZechBoY
- Člen | 3608
Nevim co máš za problém, ale zkusim si zavěštit.
foreach ($rows as $row) {
$pole[$row->datum]['hodnoty'] = array ($row->hodnoty);
$pole[$row->datum]['hodnoty'][] = 'abc'; // přidání položky do pole hodnot
$pole[$row->datum]['hodnoty1'] = 'def'; // přidání další položky do pole
}
Editoval CZechBoY (26. 5. 2017 15:40)
- japlavaren
- Člen | 404
ahoj
if($pole['2017-04-04'])
ti predpokladam, ze hodi notice. cize to treba osetrit:
$date = '2017-04-04';
if (!isset($pole[$date])) {
$pole[$date] = ['datum' => $date, 'hodnoty' => []];
} else {
$pole[$data]['hodnoty'][] = 'hodnota';
staci tak?
este doplnim:
isset funkcia na kluc, ktory obsahuje NULL hodnotu vrati FALSE, cize
$arr = ['a' => NULL, 'b' => 1];
isset($arr['a']) // FALSE
isset($arr['b']) // TRUE
isset($arr['C']) // FALSE
ak potrebujem kontrolovat aj existenciu klucou s hodnotou, treba pouzit array_key_exists
$arr = ['a' => NULL, 'b' => 1];
array_key_exists('a', $arr) // TRUE
array_key_exists('b', $arr) // TRUE
array_key_exists('c', $arr) // FALSE
vykonnostne je vsak isset ovela rychlejsi, ako array_key_exists. cize ak budes robit to overovanie vela vela krat (alebo si jednoducho detailista, ako ja), treba pouzit kombinaciu isset a array key exists
Editoval japlavaren (26. 5. 2017 13:57)
- CZechBoY
- Člen | 3608
@japlavaren ok, měl jsem dát radši odkaz na forum http://diskuse.jakpsatweb.cz/