multi-dimensional array probleem
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$array = json_decode($sheetsResponse, true);
for($i = 0; $i < count($array['rows']); $i++) {
foreach($array['rows'][$i] as $key => $value)
{
echo $key. ': '.$value;
echo '<br>';
}
echo '<br>';
}
for($i = 0; $i < count($array['rows']); $i++) {
foreach($array['rows'][$i] as $key => $value)
{
echo $key. ': '.$value;
echo '<br>';
}
echo '<br>';
}
En het resultaat hiervan is (die lus herhaalt zich tot alle rows gekend zijn, dit hier is maar 1 blok uit het geheel):
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
id: 1137841339164548
rowNumber: 8
siblingId: 6767340873377668
expanded: 1
createdAt: 2016-04-11T13:21:36Z
modifiedAt: 2016-04-15T16:50:08Z
cells: Array
rowNumber: 8
siblingId: 6767340873377668
expanded: 1
createdAt: 2016-04-11T13:21:36Z
modifiedAt: 2016-04-15T16:50:08Z
cells: Array
Tot hier toe nog alles prima.
Nu is de vraag hoe ik die cells kan uitlezen. Moet dit dan met een foreach onder een foreach?
Ik heb al verschillende dingen geprobeerd maar het werkt niet.
cells apart behandelen? Je zou met een switch-statement op $key of een simpel if-statement het onderscheid kunnen maken tussen de verschillende elemenenten en de specifieke afhandeling daarvan.
Ik ben totaal niet mee met je switch-statement
Toevoeging op 17/04/2016 15:08:19:
Ok Thomas, na een beetje opzoekwerk heb ik de code tot zover al kunnen juist zetten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
for($i = 0; $i < count($array['rows']); $i++) {
foreach($array['rows'][$i] as $key => $value)
{
//echo $key. ': '.$value;
//echo '<br>';
switch ($key) {
case id:
echo 'id: '.$value.' <br>';
break;
case rowNumber:
echo 'rowNumber: '.$value.' <br>';
break;
case siblingId:
echo 'siblingId: '.$value.' <br>';
break;
case expanded:
echo 'expanded: '.$value.' <br>';
break;
case createdAt:
echo 'createdAt: '.$value.' <br>';
break;
case modifiedAt:
echo 'modifiedAt: '.$value.' <br>';
break;
case cells:
echo 'cells: '.$value.' <br>';
break;
default:
echo '';
}
}
echo '<br>';
}
foreach($array['rows'][$i] as $key => $value)
{
//echo $key. ': '.$value;
//echo '<br>';
switch ($key) {
case id:
echo 'id: '.$value.' <br>';
break;
case rowNumber:
echo 'rowNumber: '.$value.' <br>';
break;
case siblingId:
echo 'siblingId: '.$value.' <br>';
break;
case expanded:
echo 'expanded: '.$value.' <br>';
break;
case createdAt:
echo 'createdAt: '.$value.' <br>';
break;
case modifiedAt:
echo 'modifiedAt: '.$value.' <br>';
break;
case cells:
echo 'cells: '.$value.' <br>';
break;
default:
echo '';
}
}
echo '<br>';
}
Nu zit ik nog vast op de array van de cells. Hoe krijg ik die te zien?
Toevoeging op 17/04/2016 16:01:58:
We zitten alweer een stukje verder. Ik heb ondertussen met een 2de switch mijn array uit elkaar gehaald:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
for($i = 0; $i < count($array['rows']); $i++) {
foreach($array['rows'][$i] as $key => $value)
{
//echo $key. ': '.$value;
//echo '<br>';
switch ($key) {
case id:
echo 'id: '.$value.' <br>';
break;
case rowNumber:
echo 'rowNumber: '.$value.' <br>';
break;
case siblingId:
echo 'siblingId: '.$value.' <br>';
break;
case expanded:
echo 'expanded: '.$value.' <br>';
break;
case createdAt:
echo 'createdAt: '.$value.' <br>';
break;
case modifiedAt:
echo 'modifiedAt: '.$value.' <br>';
break;
case cells:
//echo 'cells: '.$value.' <br>';
echo '<strong>Cells:</strong><br>';
$cnt = count($value);
for ($y = 0; $y < $cnt; ++$y) {
foreach($value[$y] as $k => $v)
{
switch ($k) {
case value:
echo 'value 0: '.$v.' <br> ';
break;
}
//echo $k. ': '.$v;
//echo '<br>';
}
}
break;
default:
echo '';
}
}
echo '<br><br>';
}
foreach($array['rows'][$i] as $key => $value)
{
//echo $key. ': '.$value;
//echo '<br>';
switch ($key) {
case id:
echo 'id: '.$value.' <br>';
break;
case rowNumber:
echo 'rowNumber: '.$value.' <br>';
break;
case siblingId:
echo 'siblingId: '.$value.' <br>';
break;
case expanded:
echo 'expanded: '.$value.' <br>';
break;
case createdAt:
echo 'createdAt: '.$value.' <br>';
break;
case modifiedAt:
echo 'modifiedAt: '.$value.' <br>';
break;
case cells:
//echo 'cells: '.$value.' <br>';
echo '<strong>Cells:</strong><br>';
$cnt = count($value);
for ($y = 0; $y < $cnt; ++$y) {
foreach($value[$y] as $k => $v)
{
switch ($k) {
case value:
echo 'value 0: '.$v.' <br> ';
break;
}
//echo $k. ': '.$v;
//echo '<br>';
}
}
break;
default:
echo '';
}
}
echo '<br><br>';
}
Dit geeft als resultaat (terug 1 blok uit de lus):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
id: 4113404345509764
rowNumber: 15
siblingId: 3498136321714052
expanded: 1
createdAt: 2016-04-09T21:20:50Z
modifiedAt: 2016-04-13T19:40:25Z
Cells:
value 0: Todo
value 0: Wijzigen van logica -> opsplitsen van franchisers naar bedrijf + werknemers
value 0: Management/Planning
value 0: 1
value 0: Voltooid
value 0: 2016-04-09T21:20:50Z
value 0: 2016-04-13T15:50:01Z
value 0: bsl
rowNumber: 15
siblingId: 3498136321714052
expanded: 1
createdAt: 2016-04-09T21:20:50Z
modifiedAt: 2016-04-13T19:40:25Z
Cells:
value 0: Todo
value 0: Wijzigen van logica -> opsplitsen van franchisers naar bedrijf + werknemers
value 0: Management/Planning
value 0: 1
value 0: Voltooid
value 0: 2016-04-09T21:20:50Z
value 0: 2016-04-13T15:50:01Z
value 0: bsl
Maar nu zou ik die value 0 willen splitsen in meerdere werkbare items zoals bvb value0 = 'Todo', value1 = '...', enz
Toevoeging op 17/04/2016 16:05:17:
Ik had geprobeerd om regel 40 aan te passen naar:
Maar dat is het dus niet. Dan krijg ik telkens de eerste letter van die velden en niet de gehele inhoud.
Gewijzigd op 17/04/2016 16:05:58 door Brecht S
Zoiets dan?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$array = json_decode($sheetsResponse, true);
$myData = array();
foreach ($array['rows'] as $rowNumber => $rowData) {
$myData[$rowNumber] = array(
'id' => $rowData['id'],
'data' => array(),
);
// maak hier vervolgens een soort van filter voor de cells data waar je in geinteresseerd bent
foreach ($rowData['cells'] as $k => $v) {
// doe bijvoorbeeld een (gedeeltelijke) match op naam
if (...) { // <-- hier moet je nog zelf een soort van invulling aan geven, of verder toelichten hoe cells er uitziet
// en sla dit op in $myData
$myData[$rowNumber]['data'][] = $v;
}
}
}
// nu kun je $myData gebruiken, die enkel de data bevat die je nodig hebt
?>
$array = json_decode($sheetsResponse, true);
$myData = array();
foreach ($array['rows'] as $rowNumber => $rowData) {
$myData[$rowNumber] = array(
'id' => $rowData['id'],
'data' => array(),
);
// maak hier vervolgens een soort van filter voor de cells data waar je in geinteresseerd bent
foreach ($rowData['cells'] as $k => $v) {
// doe bijvoorbeeld een (gedeeltelijke) match op naam
if (...) { // <-- hier moet je nog zelf een soort van invulling aan geven, of verder toelichten hoe cells er uitziet
// en sla dit op in $myData
$myData[$rowNumber]['data'][] = $v;
}
}
}
// nu kun je $myData gebruiken, die enkel de data bevat die je nodig hebt
?>
Ik heb proberen iets te doen maar het is ook zo niet goed:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$array = json_decode($sheetsResponse, true);
$myData = array();
foreach ($array['rows'] as $rowNumber => $rowData) {
$myData[$rowNumber] = array(
'id' => $rowData['id'],
'data' => array(),
);
// maak hier vervolgens een soort van filter voor de cells data waar je in geinteresseerd bent
foreach ($rowData['cells'] as $k => $v) {
// doe bijvoorbeeld een (gedeeltelijke) match op naam
if ($k = 'value') { // <-- hier moet je nog zelf een soort van invulling aan geven, of verder toelichten hoe cells er uitziet
// en sla dit op in $myData
$myData[$rowNumber]['data'][] = $v;
}
}
}
// nu kun je $myData gebruiken, die enkel de data bevat die je nodig hebt
echo 'Test: '.$myData['data'][0];
$myData = array();
foreach ($array['rows'] as $rowNumber => $rowData) {
$myData[$rowNumber] = array(
'id' => $rowData['id'],
'data' => array(),
);
// maak hier vervolgens een soort van filter voor de cells data waar je in geinteresseerd bent
foreach ($rowData['cells'] as $k => $v) {
// doe bijvoorbeeld een (gedeeltelijke) match op naam
if ($k = 'value') { // <-- hier moet je nog zelf een soort van invulling aan geven, of verder toelichten hoe cells er uitziet
// en sla dit op in $myData
$myData[$rowNumber]['data'][] = $v;
}
}
}
// nu kun je $myData gebruiken, die enkel de data bevat die je nodig hebt
echo 'Test: '.$myData['data'][0];
Toevoeging op 17/04/2016 20:31:48:
Ik had aan mijn eigen code ook nog wat zitten aanpassen maar hier ben ik er ook nog niet uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
$array = json_decode($sheetsResponse, true);
for($i = 0; $i < count($array['rows']); $i++) {
foreach($array['rows'][$i] as $key => $value)
{
//echo $key. ': '.$value;
//echo '<br>';
switch ($key) {
case id:
echo 'id: '.$value.' <br>';
break;
case rowNumber:
echo 'rowNumber: '.$value.' <br>';
break;
case siblingId:
echo 'siblingId: '.$value.' <br>';
break;
case expanded:
echo 'expanded: '.$value.' <br>';
break;
case createdAt:
echo 'createdAt: '.$value.' <br>';
break;
case modifiedAt:
echo 'modifiedAt: '.$value.' <br>';
break;
case cells:
//echo 'cells: '.$value.' <br>';
echo '<strong>Cells:</strong><br>';
$cnt = count($value);
for ($y = 0; $y < $cnt; ++$y) {
$items = array();
foreach($value[$y] as $k => $v)
{
switch ($k) {
case value:
//echo 'value '.$v.' <br> ';
$items[$y] = $v;
break;
}
//echo $k. ': '.$v;
//echo '<br>';
}
//print_r($items);
$wat = $items[0];
$omschr = $items[1];
$tes = $wat .'|'. $omschr;
list($wat1, $omschr1) = explode("|", $tes);
echo 'Wat: '.$wat1. '<br>';
echo 'Omschr: '.$omschr1. '<br>';
}
//print_r($items);
//echo 'wat: '.$wat;
//$array = array($wat, "bar", "hello", "world");
//var_dump($array);
//echo 'Wat: '.$wat1. '<br>';
//echo 'Omschr: '.$omschr1. '<br>';
//var_dump($test);
break;
default:
echo '';
}
}
echo '<br><br>';
}
for($i = 0; $i < count($array['rows']); $i++) {
foreach($array['rows'][$i] as $key => $value)
{
//echo $key. ': '.$value;
//echo '<br>';
switch ($key) {
case id:
echo 'id: '.$value.' <br>';
break;
case rowNumber:
echo 'rowNumber: '.$value.' <br>';
break;
case siblingId:
echo 'siblingId: '.$value.' <br>';
break;
case expanded:
echo 'expanded: '.$value.' <br>';
break;
case createdAt:
echo 'createdAt: '.$value.' <br>';
break;
case modifiedAt:
echo 'modifiedAt: '.$value.' <br>';
break;
case cells:
//echo 'cells: '.$value.' <br>';
echo '<strong>Cells:</strong><br>';
$cnt = count($value);
for ($y = 0; $y < $cnt; ++$y) {
$items = array();
foreach($value[$y] as $k => $v)
{
switch ($k) {
case value:
//echo 'value '.$v.' <br> ';
$items[$y] = $v;
break;
}
//echo $k. ': '.$v;
//echo '<br>';
}
//print_r($items);
$wat = $items[0];
$omschr = $items[1];
$tes = $wat .'|'. $omschr;
list($wat1, $omschr1) = explode("|", $tes);
echo 'Wat: '.$wat1. '<br>';
echo 'Omschr: '.$omschr1. '<br>';
}
//print_r($items);
//echo 'wat: '.$wat;
//$array = array($wat, "bar", "hello", "world");
//var_dump($array);
//echo 'Wat: '.$wat1. '<br>';
//echo 'Omschr: '.$omschr1. '<br>';
//var_dump($test);
break;
default:
echo '';
}
}
echo '<br><br>';
}
De resultaten zijn nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
id: 5167834922805124
rowNumber: 130
siblingId: 664235295434628
expanded: 1
createdAt: 2016-04-11T14:03:31Z
modifiedAt: 2016-04-13T19:40:25Z
Cells:
Wat:
Omschr:
Wat:
Omschr: Planning mailbox binnentrekken???
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
rowNumber: 130
siblingId: 664235295434628
expanded: 1
createdAt: 2016-04-11T14:03:31Z
modifiedAt: 2016-04-13T19:40:25Z
Cells:
Wat:
Omschr:
Wat:
Omschr: Planning mailbox binnentrekken???
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat:
Omschr:
Wat dus eigenlijk herhaald gaat worden volgens de lus, maar dat is dus niet juist.
Wat ook zou kunnen is dit:
Je laat deze regels weg en doe een echo op $tes.
Code (php)
1
2
3
2
3
list($wat1, $omschr1) = explode("|", $tes);
echo 'Wat: '.$wat1. '<br>';
echo 'Omschr: '.$omschr1. '<br>';
echo 'Wat: '.$wat1. '<br>';
echo 'Omschr: '.$omschr1. '<br>';
Het resultaat is dan dit:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
id: 5167834922805124
rowNumber: 130
siblingId: 664235295434628
expanded: 1
createdAt: 2016-04-11T14:03:31Z
modifiedAt: 2016-04-13T19:40:25Z
Cells:
||Planning mailbox binnentrekken???|||||||||||||
rowNumber: 130
siblingId: 664235295434628
expanded: 1
createdAt: 2016-04-11T14:03:31Z
modifiedAt: 2016-04-13T19:40:25Z
Cells:
||Planning mailbox binnentrekken???|||||||||||||
Maar ik kan met $items[0] en $items[1] precies niet werken
Als ik iets wil zoals echo 'Wat? '.$items[0].'<br>'; en echo 'Omschrijving: '.$items[1].'<br>'; dan gaat het helemaal fout en krijg ik een herhaling van dezelfde Wat? en Omschrijving zolang de lus niet rond is.
Dan vroeg ik mij af of er iets mis was aan die for loop of foreach maar kan het niet vinden.
De cell data van de eerste rij zit in $myData[0]['data'] (en dus niet in $myData['data'][0] of wat dan ook), en dit is een array, dus die kun je sowieso niet afdrukken op die manier...
Ik denk dat het voor de (jouw) begripsvorming handig en verstandig is om de inhoud eens wat vaker in een leesbare vorm te dumpen naar je scherm, bijvoorbeeld met een eenvoudige functie:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function dump($a) {
echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}
?>
function dump($a) {
echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}
?>
Voor de rest ben ik niet goed mee wat je bedoeld met:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
foreach ($rowData['cells'] as $k => $v) {
// doe bijvoorbeeld een (gedeeltelijke) match op naam
if ($k = 'value') { // <-- hier moet je nog zelf een soort van invulling aan geven, of verder toelichten hoe cells er uitziet
// en sla dit op in $myData
$myData[$rowNumber]['data'][] = $v;
}
}
// doe bijvoorbeeld een (gedeeltelijke) match op naam
if ($k = 'value') { // <-- hier moet je nog zelf een soort van invulling aan geven, of verder toelichten hoe cells er uitziet
// en sla dit op in $myData
$myData[$rowNumber]['data'][] = $v;
}
}
Vooral de if statement is hier niet duidelijk. Ik heb onder de cells een waarde value maar die komt er niet uit. Hieronder de array die ik tot nu toe heb (opgevraagd met dump($myData[0]['data']);):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Array
(
[0] => Array
(
[columnId] => 4414085128316804
)
[1] => Array
(
[columnId] => 8917684755687300
)
[2] => Array
(
[columnId] => 5364400044435332
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
)
[12] => Array
(
[columnId] => 538328903772036
)
[13] => Array
(
[columnId] => 2055895468271492
)
[14] => Array
(
[columnId] => 6559495095641988
)
)
(
[0] => Array
(
[columnId] => 4414085128316804
)
[1] => Array
(
[columnId] => 8917684755687300
)
[2] => Array
(
[columnId] => 5364400044435332
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
)
[12] => Array
(
[columnId] => 538328903772036
)
[13] => Array
(
[columnId] => 2055895468271492
)
[14] => Array
(
[columnId] => 6559495095641988
)
)
En er zijn inderdaad 14 kolommen. Dus dit zit al goed. Maar waarom staat daar ook enkel maar columnId en de rest niet?
Gewijzigd op 18/04/2016 11:54:59 door Brecht S
Misschien moeten we dit anders aanpakken.
Zou jij een voorbeeld kunnen geven van de invoer zoals je die "rauw" binnenkrijgt (de json_dedecode variant). Geef hier bijvoorbeeld twee of drie rijen data van, eventueel geanonimiseerd zodat deze geen gevoelige/persoonlijke informatie bevat.
Zou je vervolgens een voorbeeld kunnen geven welke informatie je hier vervolgens van over wilt houden en welke vorm dit zou moeten hebben. Dit laatste is dus een voorbeeld van uitvoer.
Als beide puzzelstukken wat duidelijker zijn (de vorm van de in- en uitvoer) kunnen we waarschijnlijk een stuk makkelijker wat code in elkaar fietsen om deze twee te verenigen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$array = json_decode($sheetsResponse, true);
$myData = array();
foreach ($array['rows'] as $rowNumber => $rowData) {
$myData[$rowNumber] = array(
'id' => $rowData['id'],
'data' => array(),
);
foreach ($rowData['cells'] as $k => $v) {
if ($k) {
$myData[$rowNumber]['data'][] = $v;
}
}
}
//dump($myData[71]['data'][0]['value']);
echo '<br><h2>Rij 72:</h2>';
echo "<b>Cell 1</b>: ".$myData[71]['data'][0]['value'].'<br>';
echo "<b>Cell 2</b>: ".$myData[71]['data'][1]['value'].'<br>';
echo "<b>Cell 3</b>: ".$myData[71]['data'][2]['value'].'<br>';
echo "<b>Cell 4</b>: ".$myData[71]['data'][3]['value'].'<br>';
echo "<b>Cell 5</b>: ".$myData[71]['data'][4]['value'].'<br>';
echo "<b>Cell 6</b>: ".$myData[71]['data'][5]['value'].'<br>';
echo "<b>Cell 7</b>: ".$myData[71]['data'][6]['value'].'<br>';
echo "<b>Cell 8</b>: ".$myData[71]['data'][7]['value'].'<br>';
echo "<b>Cell 9</b>: ".$myData[71]['data'][8]['value'].'<br>';
echo "<b>Cell 10</b>: ".$myData[71]['data'][9]['value'].'<br>';
echo "<b>Cell 11</b>: ".$myData[71]['data'][10]['value'].'<br>';
echo "<b>Cell 12</b>: ".date('d-m-Y H:i', strtotime($myData[71]['data'][11]['value'])).'<br>';
echo "<b>Cell 13</b>: ".date('d-m-Y H:i', strtotime($myData[71]['data'][12]['value'])).'<br>';
echo "<b>Cell 14</b>: ".$myData[71]['data'][13]['value'].'<br>';
echo "<b>Cell 15</b>: ".$myData[71]['data'][14]['value'].'<br>';
echo "<b>Cell 16</b>: ".$myData[71]['data'][15]['value'].'<br>';
function dump($a) {
echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}
$myData = array();
foreach ($array['rows'] as $rowNumber => $rowData) {
$myData[$rowNumber] = array(
'id' => $rowData['id'],
'data' => array(),
);
foreach ($rowData['cells'] as $k => $v) {
if ($k) {
$myData[$rowNumber]['data'][] = $v;
}
}
}
//dump($myData[71]['data'][0]['value']);
echo '<br><h2>Rij 72:</h2>';
echo "<b>Cell 1</b>: ".$myData[71]['data'][0]['value'].'<br>';
echo "<b>Cell 2</b>: ".$myData[71]['data'][1]['value'].'<br>';
echo "<b>Cell 3</b>: ".$myData[71]['data'][2]['value'].'<br>';
echo "<b>Cell 4</b>: ".$myData[71]['data'][3]['value'].'<br>';
echo "<b>Cell 5</b>: ".$myData[71]['data'][4]['value'].'<br>';
echo "<b>Cell 6</b>: ".$myData[71]['data'][5]['value'].'<br>';
echo "<b>Cell 7</b>: ".$myData[71]['data'][6]['value'].'<br>';
echo "<b>Cell 8</b>: ".$myData[71]['data'][7]['value'].'<br>';
echo "<b>Cell 9</b>: ".$myData[71]['data'][8]['value'].'<br>';
echo "<b>Cell 10</b>: ".$myData[71]['data'][9]['value'].'<br>';
echo "<b>Cell 11</b>: ".$myData[71]['data'][10]['value'].'<br>';
echo "<b>Cell 12</b>: ".date('d-m-Y H:i', strtotime($myData[71]['data'][11]['value'])).'<br>';
echo "<b>Cell 13</b>: ".date('d-m-Y H:i', strtotime($myData[71]['data'][12]['value'])).'<br>';
echo "<b>Cell 14</b>: ".$myData[71]['data'][13]['value'].'<br>';
echo "<b>Cell 15</b>: ".$myData[71]['data'][14]['value'].'<br>';
echo "<b>Cell 16</b>: ".$myData[71]['data'][15]['value'].'<br>';
function dump($a) {
echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}
Dit geeft mij een mooi overzicht van 1 rij wat ik wil hebben. Alleen zitten we hier nog met een klein probleem. De eerste cell krijg ik niet te zien. In de code kan ik die normaal gesproken opvragen met $myData[71]['data'][0]['value'] maar dan krijg ik de 2de cell te zien, enz.
En bijkomend:
Uiteraard moeten nu nog alle rijen in een for loop zodat hij alle rijen afloopt die er zijn. Op dit moment meer dan 200.
Kan je hiermee verder? Of moet ik in 'invoer' en 'uitvoer' ook nog eens posten en beginnen we opnieuw?
Gewijzigd op 18/04/2016 14:50:56 door Brecht S
Quote:
Dit geeft mij een mooi overzicht van 1 rij wat ik wil hebben. Alleen zitten we hier nog met een klein probleem. De eerste cell krijg ik niet te zien. In de code kan ik die normaal gesproken opvragen met $myData[71]['data'][0]['value'] maar dan krijg ik de 2de cell te zien, enz.
Komt dit niet door je if-statement?
Die zegt:
Als $k gelijk is aan 0, een lege string of iets soortgelijks is dit equivalent aan:
En dat wordt dus nooit uitgevoerd...
Als je die foreach (regel 3 t/m 17 uit bovenstaande fragment) nu gewoon eens vervangt door:
Code (php)
Want zoals ik het zie ben je gewoon alles braaf uit "cells" aan het kopiëren, dat hoef je niet in een aparte for-loop te doen maar kan rechtstreeks.
EDIT: of nog compacter, maak "id" de key van $myData, en "cells" de values:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($array['rows'] as $rowData) {
$myData[$rowData['id']] = $rowData['cells'];
}
?>
foreach ($array['rows'] as $rowData) {
$myData[$rowData['id']] = $rowData['cells'];
}
?>
(moet $rowData['id'] wel uniek zijn uiteraard)
Gewijzigd op 18/04/2016 15:02:53 door Thomas van den Heuvel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Array
(
[id] => 7544128255879044
[data] => Array
(
[0] => Array
(
[columnId] => 4414085128316804
[value] => Todo
[displayValue] => Todo
)
[1] => Array
(
[columnId] => 8917684755687300
[value] => uitleg
[displayValue] => uitleg
)
[2] => Array
(
[columnId] => 5364400044435332
[value] => Management
[displayValue] => Management
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
[value] => test
[displayValue] => test
)
[12] => Array
(
[columnId] => 538328903772036
[value] => 2016-04-17T07:52:56Z
)
[13] => Array
(
[columnId] => 2055895468271492
[value] => 2016-04-18T14:58:57Z
)
[14] => Array
(
[columnId] => 6559495095641988
[value] => bsl
[displayValue] => bsl
)
[15] => Array
(
[columnId] => 8384574876084100
[value] => 1.1
[displayValue] => 1.1
)
[16] => Array
(
[columnId] => 1066225481607044
[value] => test
[displayValue] => test
)
)
)
(
[id] => 7544128255879044
[data] => Array
(
[0] => Array
(
[columnId] => 4414085128316804
[value] => Todo
[displayValue] => Todo
)
[1] => Array
(
[columnId] => 8917684755687300
[value] => uitleg
[displayValue] => uitleg
)
[2] => Array
(
[columnId] => 5364400044435332
[value] => Management
[displayValue] => Management
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
[value] => test
[displayValue] => test
)
[12] => Array
(
[columnId] => 538328903772036
[value] => 2016-04-17T07:52:56Z
)
[13] => Array
(
[columnId] => 2055895468271492
[value] => 2016-04-18T14:58:57Z
)
[14] => Array
(
[columnId] => 6559495095641988
[value] => bsl
[displayValue] => bsl
)
[15] => Array
(
[columnId] => 8384574876084100
[value] => 1.1
[displayValue] => 1.1
)
[16] => Array
(
[columnId] => 1066225481607044
[value] => test
[displayValue] => test
)
)
)
Nu loop ik nog steeds niet door de bepaalde rijen? Met die for loop bedoelde ik eigenlijk dat ik met $i en $i++ door alles kan lopen, dus m.a.w gewoon alle rijen kan opvragen en de daarbij horende cellen kan weergeven.
Gewijzigd op 18/04/2016 17:17:43 door Brecht S
Mocht het nog steeds niet naar behoren werken dan verwijs ik naar mijn vorige voorstel: geef een aantal rijen (2 a 3) van de input en geef aan hoe je wilt dat de output er uit ziet. Dat werkt gewoon een stuk makkelijker en kan ik de oplossing ook testen met concrete invoer.
Als ik heel eerlijk ben lijkt het erop dat je nog niet heel vaak of uitgebreid met multidimensionale arrays hebt gewerkt. Kan dit kloppen?
Het rijnummer heeft voor mij eigenlijk geen betekenis. Alleen de cellen, maar ik moet een loop hebben die door al mijn rijen gaat en de daarbij horende cellen meegeeft. Dus met bvb $rowData[73] ben ik niet veel omdat ik nooit weet hoeveel rijen er werkelijk zijn. Dat hangt af van projectsheet tot projectsheet.
Er zijn ook bepaalde rijen die geen data bevatten, dat zou ik dus later op kunnen oplossen door een if statement te zetten die een bepaalde cel in een rij gaat controleren of die niet leeg is en dan alle cellen laat weergeven onder die rij. Indien die cell wel leeg is zal de rij niet weergegeven worden.
Dus kortom, de $rowData[73] werkt perfect maar dit is maar 1 rij. Als ik die [73] door een $i zou kunnen vervangen van mijn for loop dan zijn we er toch? Of ben ik nu totaal verkeerd?
En... nee, ik heb heel weinig ervaring met multidimensional arrays, vandaar mijn vraag hier ;-)
Toevoeging op 19/04/2016 10:29:01:
Dit hieronder zijn de laatste 2 rijen van mijn gedecodeerde json, dus de $array (invoer voorbeeld):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
[247] => Array
(
[id] => 8343518306428804
[rowNumber] => 248
[siblingId] => 3839918679058308
[expanded] => 1
[createdAt] => 2016-04-18T17:18:38Z
[modifiedAt] => 2016-04-18T17:18:38Z
[cells] => Array
(
[0] => Array
(
[columnId] => 4414085128316804
)
[1] => Array
(
[columnId] => 8917684755687300
[value] => Koppeling met boekhoudpakket
[displayValue] => Koppeling met boekhoudpakket
)
[2] => Array
(
[columnId] => 5364400044435332
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
)
[12] => Array
(
[columnId] => 538328903772036
[value] => 2016-04-18T17:18:38Z
)
[13] => Array
(
[columnId] => 2055895468271492
[value] => 2016-04-18T17:18:38Z
)
[14] => Array
(
[columnId] => 6559495095641988
[value] => bsl
[displayValue] => bsl
)
[15] => Array
(
[columnId] => 8384574876084100
)
[16] => Array
(
[columnId] => 1066225481607044
)
)
)
[248] => Array
(
[id] => 1025168911951748
[rowNumber] => 249
[parentId] => 8343518306428804
[expanded] => 1
[createdAt] => 2016-04-18T17:18:38Z
[modifiedAt] => 2016-04-18T17:18:38Z
[cells] => Array
(
[0] => Array
(
[columnId] => 4414085128316804
)
[1] => Array
(
[columnId] => 8917684755687300
[value] => Nog uit te werken
[displayValue] => Nog uit te werken
)
[2] => Array
(
[columnId] => 5364400044435332
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
)
[12] => Array
(
[columnId] => 538328903772036
[value] => 2016-04-18T17:18:38Z
)
[13] => Array
(
[columnId] => 2055895468271492
[value] => 2016-04-18T17:18:38Z
)
[14] => Array
(
[columnId] => 6559495095641988
[value] => bsl
[displayValue] => bsl
)
[15] => Array
(
[columnId] => 8384574876084100
)
[16] => Array
(
[columnId] => 1066225481607044
[value] => 1.1
[displayValue] => 1.1
)
)
)
)
(
[id] => 8343518306428804
[rowNumber] => 248
[siblingId] => 3839918679058308
[expanded] => 1
[createdAt] => 2016-04-18T17:18:38Z
[modifiedAt] => 2016-04-18T17:18:38Z
[cells] => Array
(
[0] => Array
(
[columnId] => 4414085128316804
)
[1] => Array
(
[columnId] => 8917684755687300
[value] => Koppeling met boekhoudpakket
[displayValue] => Koppeling met boekhoudpakket
)
[2] => Array
(
[columnId] => 5364400044435332
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
)
[12] => Array
(
[columnId] => 538328903772036
[value] => 2016-04-18T17:18:38Z
)
[13] => Array
(
[columnId] => 2055895468271492
[value] => 2016-04-18T17:18:38Z
)
[14] => Array
(
[columnId] => 6559495095641988
[value] => bsl
[displayValue] => bsl
)
[15] => Array
(
[columnId] => 8384574876084100
)
[16] => Array
(
[columnId] => 1066225481607044
)
)
)
[248] => Array
(
[id] => 1025168911951748
[rowNumber] => 249
[parentId] => 8343518306428804
[expanded] => 1
[createdAt] => 2016-04-18T17:18:38Z
[modifiedAt] => 2016-04-18T17:18:38Z
[cells] => Array
(
[0] => Array
(
[columnId] => 4414085128316804
)
[1] => Array
(
[columnId] => 8917684755687300
[value] => Nog uit te werken
[displayValue] => Nog uit te werken
)
[2] => Array
(
[columnId] => 5364400044435332
)
[3] => Array
(
[columnId] => 860800417064836
)
[4] => Array
(
[columnId] => 121591733479300
)
[5] => Array
(
[columnId] => 4625191360849796
)
[6] => Array
(
[columnId] => 2373391547164548
)
[7] => Array
(
[columnId] => 6876991174535044
)
[8] => Array
(
[columnId] => 5751091267692420
)
[9] => Array
(
[columnId] => 3499291454007172
)
[10] => Array
(
[columnId] => 8002891081377668
)
[11] => Array
(
[columnId] => 684541686900612
)
[12] => Array
(
[columnId] => 538328903772036
[value] => 2016-04-18T17:18:38Z
)
[13] => Array
(
[columnId] => 2055895468271492
[value] => 2016-04-18T17:18:38Z
)
[14] => Array
(
[columnId] => 6559495095641988
[value] => bsl
[displayValue] => bsl
)
[15] => Array
(
[columnId] => 8384574876084100
)
[16] => Array
(
[columnId] => 1066225481607044
[value] => 1.1
[displayValue] => 1.1
)
)
)
)
De cellen die een lege value hebben krijgen dus enkel maar de columnId terug.
Een rowNumber terugkrijgen ipv een kolomID zou misschien ook niet slecht zijn. Dus romnummer en de bijhorende cellen (indien de laatste cell niet leeg is bvb, anders sla je het rijnummer over).
Gewijzigd op 19/04/2016 10:30:53 door Brecht S
en
het vervolgens uitlezen/nader inspecteren van deze gefilterde data
zijn twee aparte handelingen, die elk een verschillend doel dienen.
Om het overzicht te bewaren is het verstandig om deze in afzondering te behandelen, het zijn twee verschillende problemen.
In plaats van het in één slag willen oplossen van een probleem is het vaak makkelijker om in kleine, maar weloverwogen, stappen te werken naar het einddoel.
Quote:
Dus kortom, de $rowData[73] werkt perfect maar dit is maar 1 rij. Als ik die [73] door een $i zou kunnen vervangen van mijn for loop dan zijn we er toch? Of ben ik nu totaal verkeerd?
Nee dat klopt wel denk ik, maar als ik de rest van je verhaal zo lees kun je de "cells" data nog wat verder filteren. Je voorselectie kan dus nog strakker zodat je enkel de data overhoudt waar het om gaat.
Wanneer beschouw je een "cells" item als leeg / niet interessant? Wanneer displayValue leeg is?
Ik neem aan dat het kolomnummer van "cells" wel op een of andere manier relevant is?
Verschillen de value en displayValue ooit?
En kan het inderdaad voorkomen dat geen van de data in de "cells" van een rij relevante informatie bevat, waarmee dus effectief de hele rij weggelaten kan worden uit de resultaten?