multi-dimensional array probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Integratie expert - Java Developer

Dit ga je doen Nieuw koppelingen ontwerpen, ontwikkelen en implementeren; Je schakelt met de klanten om hen zo goed mogelijk van dienst te zijn. Strategisch kijken naar nieuwe mogelijkheden op bestaande of nieuwe koppelingen zo effectief mogelijk te realiseren; Je bestaande toolset afwegen tegen nieuwe mogelijkheden om integratiedoelen steeds effectiever en/of effcienter te bewerkstelligen; Bestaande software koppelingen beheren, dit zijn koppelingen met zowel interne als externe systemen; Overleg met zowel directe collega's als met stakeholders om nieuwe integratieplannen concreet te maken; Je kunt de junioren meenemen op sleeptouw. Hier ga je werken Onze klant is op zoek naar een ervaren

Bekijk vacature »

Java Developer

Functie Wat ga je doen als Java developer? Jij komt terecht binnen een informeel team waarin je verantwoordelijk bent voor de backend systemen voor grote klanten als Ziggo en KPN. Als Medior Java developer werk je in teamverband en soms individueel. Gedurende de werkweek zal je veelvuldig sparren met je collega’s voor een goede implementatie van de software. Ben jij een echte Java developer? Ben je geïnteresseerd in de nieuwste technieken en de laatste ontwikkelingen? Dan ben je hier aan het juiste adres! Eisen Wat wordt er van jou verwacht? • Minimaal HBO/WO denk- en werkniveau; • Analytisch sterk, open

Bekijk vacature »

3D BIM Add-on Developer

As a 3D BIM add- on developer at KUBUS, you will develop add-ons (called BCF- Managers) to the leading building information modeling (BIM) programs Revit, Navisworks, Archicad, AutoCAD and Tekla Structures. BCF Managers enable data transfer between BIM software and BIMcollab. You will work on both the front- and the back-end. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact in the market, but small enough that as an individual

Bekijk vacature »

Ervaren Magento developer gezocht!

Functie Je komt te werken in een zelfsturend team waarin vertrouwen voorop staat en inbreng en ideeën worden gewaardeerd. Ook staat innovatie centraal. Ze bieden jou de mogelijkheid om jezelf door te ontwikkelen. Denk hierbij aan cursussen en een persoonlijk ontwikkelplan. Je komt terecht in het team van momenteel 4 (ervaren) collega’s en zal meewerken aan de doorontwikkeling en nieuwbouw van de Magento platformen van meerdere opdrachtgevers volgens Agile/Scrum. Denk hierbij aan nieuwe functionaliteiten, UX en koppelingen met verschillende back-end systemen. Als ervaren developer zul je hiernaast ook andere developers assisteren en waar nodig de leiding nemen in het project.

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

BizTalk/ Azure Developer

Dit ga je doen •Understanding the scope of required functionality, translate them within context of way of working of the team into developed solutions, whilst safeguarding documentation; •Planning based on assigned sprint tasks; •Acting as an expert in estimation techniques and planning; •Understanding your role in the agile process and act in this way; •Facilitating internal communication and effective collaboration; •Working closely with scrum master to handle backlogs and new requests; •Providing information to the third parties about activities and needs for compliance. Hier ga je werken Our client is a leading organization focusing on animal nutrition, offering solutions that

Bekijk vacature »

.NET developer

Functie Als junior .NET ontwikkelaar ga jij aan de slag in één van de 5 IT teams van dit bedrijf. Jullie werken op basis van interne klantprojecten aan voornamelijk webapplicaties. Dit betekent dat jij continu uitgedaagd wordt en veelal met verschillende soorten projecten bezig bent. Het gave is dan ook dat jullie als team samen bekijken welke technieken het beste passen bij het project waar jullie verantwoordelijk voor zijn. Zo kan het zijn dat jij als .NET developer gaat werken aan een project, maar dat jullie als team liever gebruik maken van Haskell of F# om de klus te klaren.

Bekijk vacature »

Frontend Developer

Dit ga je doen Door ontwikkelen van het online platform Deel uitmaken van verschillende ontwikkelteams Meedenken over UI/UX vraagstukken Uitdragen van Front-end binnen de organisatie Hier ga je werken Deze organisatie, gevestigd in de omgeving van Amsterdam, is een grote onderwijs instelling met meerdere vestigingen en een groot aantal studenten. Zo telt deze organisatie +/- 35.000 gebruikers. Bij deze organisatie staat jouw ontwikkeling centraal en is er veel ruimte voor eigen initiatieven. In samenwerking met jouw team ga jij de online omgeving verder ontwikkelen. In de rol van Front end Developer zal jij 50% van jouw tijd werken in het

Bekijk vacature »

C# .NET Software Ontwikkelaar

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Arnhem gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Als C# .NET Developer binnen dit bedrijf houd je je niet alleen bezig met het verbeteren van

Bekijk vacature »

Medior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Medior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

Bekijk vacature »

PHP developer - Digital Agency

Functie Het team telt momenteel 20 collega’s, bestaande uit developers (front- en backend) en het operations team, waaronder ook het management en twee scrum masters vallen. Ze zijn op zoek naar een PHP developer die in staat is zelfstandig te werken. Je komt te werken in één van de drie scrumteams en gaat aan de slag met een project voor de klant. Het fijne hieraan is dat je wel afwisseling hebt qua werk, maar tegelijkertijd doorlopend werkt voor bestaande klanten. Hierdoor krijg je ook de kans om echt de diepte in te gaan en innovatieve technische oplossingen neer te zetten.

Bekijk vacature »

Lead C++ Developer

De rol van Lead C++ Developer Als Lead C++ developer bij KUBUS word je verantwoordelijk voor het implementatie design van requirements en de software architectuur van de desktop applicaties van BIMcollab, ons platform voor 3D model-validatie en issue-management bedoeld om de kwaliteit van 3D design-modellen voor gebouwen te verbeteren. Betere 3D modellen leiden tot betere gebouwen, dus zo draag je bij aan verduurzaming van de gebouwde omgeving met slimmer gebruik van materialen, minder verspilling en energie-efficiënte gebouwen. Een goede gebruikerservaring staat bij ons hoog in het vaandel; we gaan in onze ontwikkeling voor innovatie en kwaliteit. In je rol als

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer!? Sta jij aan het begin van jouw loopbaan of heb jij misschien al enige ervaring? Vind jij het daarnaast belangrijk om jezelf constant te kunnen ontwikkelen en uitdagen? Lees dan snel verder! Voor een vooraanstaand softwarehuis in Nieuwegein ben ik op zoek naar een Junior Software Developer. De eigenaar van het bedrijf is ervan bewust dat je als junior nog een hoop kan leren, waardoor je de eerste maanden veel begeleiding en diverse trainingen krijgt. Daarna ga je samen met je collega's aan zowel kleine als grote projecten werken.

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een development team met één Senior .NET developer en één junior .NET developer. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit moment veel gebruik van .NET met ASP.NET. Komend kwartaal gaan wij wel gedeeltelijk overstappen naar .NET Core. Verder werken wij ook met SOAP, REST, JSON, HTML5, CSS3

Bekijk vacature »
Brecht S

Brecht S

17/04/2016 14:36:02
Quote Anchor link
Met het onderstaande scriptje (uitlezen van een array):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
}


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)
PHP script in nieuw venster Selecteer het PHP script
1
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


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.
 
PHP hulp

PHP hulp

22/12/2024 13:03:26
 
Thomas van den Heuvel

Thomas van den Heuvel

17/04/2016 14:49:21
Quote Anchor link
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.
 
Brecht S

Brecht S

17/04/2016 14:53:57
Quote Anchor link
Eigenlijk is het einddoel om hier de cells over te houden, met de rijnummers enz ben ik eigenlijk niks. Ik ben gewoon aan het proberen om tot mijn eindresultaat te komen, maar het lukt dus niet. Kan jij mij hiermee verder helpen?
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)
PHP script in nieuw venster Selecteer het PHP script
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
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>';
}


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)
PHP script in nieuw venster Selecteer het PHP script
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
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>';
}


Dit geeft als resultaat (terug 1 blok uit de lus):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
echo 'value 0: '.$v[0].' <br> ';
echo 'value 1: '.$v[1].' <br> ';

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
 
Thomas van den Heuvel

Thomas van den Heuvel

17/04/2016 19:50:26
Quote Anchor link
Je zou ook kunnen overwegen om een nieuw array te bouwen die wat makkelijker is in het gebruik. Het enige wat je over wilt houden is de cellen per rij? En misschien het id? Ik vind het oorspronkelijke formaat een beetje wollig, maar daar kun je waarschijnlijk weinig aan veranderen.

Zoiets dan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>
 
Brecht S

Brecht S

17/04/2016 20:19:24
Quote Anchor link
Ik ben niet helemaal mee met wat je bedoeld. Je hebt ook de for loop overgeslagen? Nu krijg je toch niet alle rows en cells terug?

Ik heb proberen iets te doen maar het is ook zo niet goed:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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];


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)
PHP script in nieuw venster Selecteer het PHP script
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
        $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>';
}


De resultaten zijn nu:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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:


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
list($wat1, $omschr1) = explode("|", $tes);
echo 'Wat: '.$wat1. '<br>';
echo 'Omschr: '.$omschr1. '<br>';


Het resultaat is dan dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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???|||||||||||||


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.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/04/2016 02:04:47
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// ...
echo 'Test: '.$myData['data'][0];
// ...
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function dump($a) {
    echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}

?>
 
Brecht S

Brecht S

18/04/2016 11:00:36
Quote Anchor link
@Thomas: ik heb je functie gebruikt en dit is inderdaad wel handig.
Voor de rest ben ik niet goed mee wat je bedoeld met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
        }
    }

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)
PHP script in nieuw venster Selecteer het PHP script
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
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
        )

)

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
 
Thomas van den Heuvel

Thomas van den Heuvel

18/04/2016 14:39:12
Quote Anchor link
Uit jouw eerste reactie waarin je een voorbeeld geeft van de inhoud van "cells" maakte ik op dat dit array, net zoals de data die in de "rows" zit méér data bevat dan die jij strict gesproken nodig had en ook sprak hier min of meer de wens uit om dit te herstructureren tot iets wat makkelijker in het gebruik is. Klopt dit?

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.
 
Brecht S

Brecht S

18/04/2016 14:48:12
Quote Anchor link
Misschien eventjes terugkomen op je eerder geplaatste code. We geraken er misschien wel nog aan uit zonder opnieuw te moeten beginnen. Wat ik tot nu toe heb gedaan is je code aangepast naar het onderstaande:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
$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>';
}


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
 
Thomas van den Heuvel

Thomas van den Heuvel

18/04/2016 14:57:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($k) {
    // ...
}
?>

Als $k gelijk is aan 0, een lege string of iets soortgelijks is dit equivalent aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (false) {
    // ...
}
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
foreach ($array['rows'] as $rowNumber => $rowData) {
    $myData[$rowNumber] = array(
        'id'   => $rowData['id'],
        'data' => $rowData['cells'],
    );
}

?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
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
 
Brecht S

Brecht S

18/04/2016 17:14:55
Quote Anchor link
Het eerste gedeelte over de if is juist. Ik heb deze weggelaten en dan is het prima. Dus nu nog juist die for loop of jouw aangepaste versie. Ik heb dit uitgetest maar ik moet hier toch nog altijd een nummer achterlaten van een bepaalde row? Dus ik kan gegevens opvragen met $rowData[73] bvb en dan krijg ik dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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
                )

        )

)


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
 
Thomas van den Heuvel

Thomas van den Heuvel

19/04/2016 00:18:37
Quote Anchor link
Heeft het rijnummer dan betekenis? Het klopt dat er wat for-loops missen in mijn variant ten opzichte van jouw variant, maar volgens mij maakt dat niet uit? Alle relevante data wordt nog steeds opgehaald? Anders zou je toch nooit de 74e rij kunnen opvragen ($rowData[73])? Of ik heb ergens een fout gemaakt, ik heb mijn oplossing verder niet getest.

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?
 
Brecht S

Brecht S

19/04/2016 10:22:18
Quote Anchor link
Thomas,

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)
PHP script in nieuw venster Selecteer het PHP script
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
[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
                                )

                        )

                )

        )


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
 
Thomas van den Heuvel

Thomas van den Heuvel

19/04/2016 13:01:07
Quote Anchor link
Het uitlezen van de oorspronkelijke data en daar de relevante data uitfilteren
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?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.