přidání prvků v asociativním poli

Webster.K
Člen | 192
+
0
-

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

Webster.K
Člen | 192
+
0
-

A potřeboval bych třeba do

$pole['2017-04-04']

přicpat další hodnoty, jako třeba

'hodnoty1'=>array('HODNOTY');

Editoval Webster.K (26. 5. 2017 13:38)

iNviNho
Člen | 352
+
0
-

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
+
+1
-

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
}

ps. www.jakpsatweb.cz

Editoval CZechBoY (26. 5. 2017 15:40)

japlavaren
Člen | 404
+
0
-

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)

japlavaren
Člen | 404
+
0
-

CZechBoY napsal(a):

ps. www.jakpsatweb.cz

na jpw moc o php nezisti, alebo sa nieco pomeilo?

Webster.K
Člen | 192
+
0
-

Díky všem, už jsem to dal dohromady, jsem měl nějaký zkrat a musel jsem si na pár hodin dát od programování pokoj :) už to vše jde tak jak má :) díky všem

CZechBoY
Člen | 3608
+
0
-

@japlavaren ok, měl jsem dát radši odkaz na forum http://diskuse.jakpsatweb.cz/