Data halen uit een hele uitgebreide array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bob van Haren

Bob van Haren

20/05/2011 21:18:34
Quote Anchor link
Hallo,

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


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

PHP hulp

28/03/2024 15:11:37
 
Thomas van den Bulk

Thomas van den Bulk

20/05/2011 22:06:10
Quote Anchor link
oke, mij lijkt me het handigste om gewoon dit te doen:

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


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
 
PHP Scripter

PHP Scripter

20/05/2011 23:24:46
Quote Anchor link
Thomas, het is veel overzichtelijker en makkelijker als je goede naamgeving hebt voor je variabelen. Uiteindelijk blijft het een persoonlijke keuze. Maar het ziet er 'netter' uit en het is makkelijker in gebruik. Hier een voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$LeerlingNummer
= "";
$LeerlingNaam = "";
$LeerlingMentor = "";
$LeerlingMentor = "";
$LeerlingKlas = "";
?>
 
Joris van Rijn

Joris van Rijn

21/05/2011 06:40:16
Quote Anchor link
Tip:
Als je <pre> tags voor en na de print_r zet, krijg je een overzichtelijke array!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo '<pre>';
print_r($result);
echo '</pre>';
?>
Gewijzigd op 21/05/2011 06:40:36 door Joris van Rijn
 
Bob van Haren

Bob van Haren

21/05/2011 09:08:21
Quote Anchor link
Super bedankt voor de tips!
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)
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
<?
    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?
 
Thomas van den Bulk

Thomas van den Bulk

21/05/2011 13:35:51
Quote Anchor link
waarom gebruik je niet ipv preg_split niet gewoon explode:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$splitter
= explode(' ', $naam);
?>

en ipv substr_count($naam, ' '); gewoon count:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$aantalspaties
= count($splitter);
?>

opzich is de aantalspaties niet nodig als je gewoon alles wilt echoen.
als je alles wilt echo'en kun je beter foreach gebruken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($splitter as $name){
    echo $name.' ';
}

?>


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
 



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.