Data halen uit een hele uitgebreide array
Ik ben al redelijk ver met een project van me.
Nu heb ik een API gekregen met daarin data die ik nodig heb.
Mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
require "connect.php";
//De functie getLeerlingNaam aanroepen:
$client = new soapclient('http://ed.cupweb6.nl/wscuprooster.asmx?wsdl', true);
$result = $client->call('getLeerlingNaam', array('llnr' => '755613'));
//Het resultaat in zijn geheel is dan:
print_r($result);
//En nu probeer ik alleen de naam eruit te halen, maar dat gaat niet:
echo "Ik heet {$result['getLeerlingNaamResult']['schema']['diffgram']['NewDataSet']['result']['naam']}";
?>
require "connect.php";
//De functie getLeerlingNaam aanroepen:
$client = new soapclient('http://ed.cupweb6.nl/wscuprooster.asmx?wsdl', true);
$result = $client->call('getLeerlingNaam', array('llnr' => '755613'));
//Het resultaat in zijn geheel is dan:
print_r($result);
//En nu probeer ik alleen de naam eruit te halen, maar dat gaat niet:
echo "Ik heet {$result['getLeerlingNaamResult']['schema']['diffgram']['NewDataSet']['result']['naam']}";
?>
Als je gaat kijken naar de Array die ik krijg met print_r($result); krijg ik:
Array ( [getLeerlingNaamResult] => Array ( [schema] => Array ( [element] => Array ( [complexType] => Array ( [choice] => Array ( [element] => Array ( [complexType] => Array ( [sequence] => Array ( [element] => Array ( [0] => Array ( [!name] => llnr [!minOccurs] => 0 ) [1] => Array ( [!name] => naam [!minOccurs] => 0 ) [2] => Array ( [!name] => mentor [!minOccurs] => 0 ) [3] => Array ( [!name] => klas [!minOccurs] => 0 ) ) ) ) [!name] => result ) [!maxOccurs] => unbounded ) ) [!name] => NewDataSet [!msdata:IsDataSet] => true [!msdata:Locale] => nl-NL ) [!id] => NewDataSet ) [diffgram] => Array ( [NewDataSet] => Array ( [result] => Array ( [llnr] => 755613 [naam] => Haren van Bob [mentor] => ALI [klas] => 5Vb [!diffgr:id] => result1 [!msdata:rowOrder] => 0 ) ) ) ) )
Het enige wat ik nodig heb zijn de gegevens die onderstreept zijn.
Help!
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$result = $result['getLeerlingNaamResult']['schema']['diffgram']['NewDataSet']['result'];
$llnr = $result['llnr'];
$naam = $result['naam'];
$mentor = $result['mentor'];
$klas = $result['klas'];
?>
$result = $result['getLeerlingNaamResult']['schema']['diffgram']['NewDataSet']['result'];
$llnr = $result['llnr'];
$naam = $result['naam'];
$mentor = $result['mentor'];
$klas = $result['klas'];
?>
met die $result haal je het niet, je moet elk stapje in je array daar invullen,
maar een api is bedoeld om het scripten een stuk makkelijker te maken,
een api is er voor bedoeld om door iedereen gebruikt te kunnen worden,
op deze manier een array te laten zien is niet echt heel logisch.
ik weet niet of je dat bedoelde, maar dat kon ik uit je vraag begrijpen.
nog iets, hij werkt miss niet omdat de weg naar waar je naar toe wil is:
$result['getLeerlingNaamResult']['diffgram']['NewDataSet']['result']['naam'];
Gewijzigd op 20/05/2011 22:20:00 door Thomas van den Bulk
Als je <pre> tags voor en na de print_r zet, krijg je een overzichtelijke array!
Gewijzigd op 21/05/2011 06:40:36 door Joris van Rijn
Ik ga het nu proberen te fixen
Toevoeging op 21/05/2011 09:32:36:
Nou, ik heb alles even veranderd. Het probleem lag in de onoverzichtelijke array (dankjewel Joris) en daarom had ik de verkeerde weg naar de data die ik nodig had (dankjewel Thomas). Nu heb ik het allemaal gemaakt.
Ik heb wel voor de variabele gekozen in de vorm van llnr, naam, klas en mentor. Dit omdat ze zo ook in onze SQL voorkomen.
Het werkt nu, dat is mooi.
Nu ga ik nog even zorgen dat de naam niet "Haren van Bob" is, maar "Bob van Haren" om de naam weer te geven. In de SQL moet dit juist niet, want de leraren hebben de naam altijd in de omgekeerde vorm staan.
Bedankt nogmaals,
Bob
Toevoeging op 21/05/2011 09:55:12:
Hallo nogmaals.
Het is me gelukt de naam om te draaien voor gebruik op de pagina zelf.
Mijn code:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
require "CUP.php";
require "connect.php";
//De functie getLeerlingNaam roep je dan zo aan:
$result = $client->call('getLeerlingNaam', array('llnr' => '755613'));
//Het resultaat is dan
/*echo '<pre>';
print_r($result);
echo '</pre>';*/
$result = $result['getLeerlingNaamResult']['diffgram']['NewDataSet']['result'];
$llnr = $result['llnr'];
$naam = $result['naam'];
$mentor = $result['mentor'];
$klas = $result['klas'];
$splitter = preg_split('/ /', $naam, null);
$aantalspaties = substr_count($naam, ' ');
$eerstedeel = $splitter[$aantalspaties];
$tweededeel = $splitter[$aantalspaties-1];
$derdedeel = $splitter[$aantalspaties-2];
$vierdedeel = $splitter[$aantalspaties-3];
$vijfdedeel = $splitter[$aantalspaties-4];
echo "$eerstedeel $tweededeel $derdedeel $vierdedeel $vijfdedeel";
?>
require "CUP.php";
require "connect.php";
//De functie getLeerlingNaam roep je dan zo aan:
$result = $client->call('getLeerlingNaam', array('llnr' => '755613'));
//Het resultaat is dan
/*echo '<pre>';
print_r($result);
echo '</pre>';*/
$result = $result['getLeerlingNaamResult']['diffgram']['NewDataSet']['result'];
$llnr = $result['llnr'];
$naam = $result['naam'];
$mentor = $result['mentor'];
$klas = $result['klas'];
$splitter = preg_split('/ /', $naam, null);
$aantalspaties = substr_count($naam, ' ');
$eerstedeel = $splitter[$aantalspaties];
$tweededeel = $splitter[$aantalspaties-1];
$derdedeel = $splitter[$aantalspaties-2];
$vierdedeel = $splitter[$aantalspaties-3];
$vijfdedeel = $splitter[$aantalspaties-4];
echo "$eerstedeel $tweededeel $derdedeel $vierdedeel $vijfdedeel";
?>
Hij is waarschijnlijk niet efficient, maar hij werkt. Zijn er eventuele snellere manieren die ik ook begrijp?
en ipv substr_count($naam, ' '); gewoon count:
opzich is de aantalspaties niet nodig als je gewoon alles wilt echoen.
als je alles wilt echo'en kun je beter foreach gebruken:
nog een vraag, waarom wil je eerst alles splitten/uit elkaar halen bij elke spatie, om ze daarna weer bij elkaar te zetten?
of is dit gewoon als voorbeeld om te testen dat het werkt x)
Gewijzigd op 21/05/2011 13:37:12 door Thomas van den Bulk