Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [php] Conditioneel iets in een array zetten  (gelezen 757 keer)

Offline Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
[php] Conditioneel iets in een array zetten
« Gepost op: 2014/03/10, 21:26:12 »
Ik heb weer eens iets waar ik niet helemaal uitkom :)

Het gaat om de volgende code:
Code: (php) [Selecteer]
        // voor ieder lid met een pin vullen we de array in met aanvullende data uit SMF
        foreach ($memberContext as $marker)
        {
                $feature = array(
                'type' => 'Feature',
                'geometry' => array(
                        'type' => 'Point',
                        'coordinates' => array(
                                round($marker['googleMap']['longitude'], 8),
                                round($marker['googleMap']['latitude'], 8)
                        )
                ),
                'properties' => array(
                                'avatar' => $marker['avatar']['href'],
                                'smfid' => $marker['id'],
                                'name' => $marker['name'],
                                'steunpunt' => $marker['options']['cust_steunp'],
                                'launchpad' => $marker['options']['cust_launch'],

                )
                );
        array_push($geojson['features'], $feature);
        }

Deze loop moet een aantal arrays vullen met data, het probleem zit in de 'properties' array.
Ik wil daar wat elementen aan toevoegen, maar alleen als die niet leeg zijn.

Bijv. het launchpad-element is soms niet gedefinieerd wat een "undefined index" notice oplevert, maar ik kom ook "" (leeg) of NULL tegen.

Iemand enig idee hoe ik dit netjes op kan lossen?

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: [php] Conditioneel iets in een array zetten
« Reactie #1 Gepost op: 2014/03/11, 00:25:50 »
Ik weet niet helemaal juist wat je bedoelt, maar om te testen of iets ongedefinieerd is kan je isset gebruiken.
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: [php] Conditioneel iets in een array zetten
« Reactie #2 Gepost op: 2014/03/11, 01:57:23 »
Ik wil van ieder lid van dit forum wat gegevens uit de database halen en in een json bestand zetten: sample

Het probleem is dat niet ieder lid een Launchpad-account heeft opgegeven, of dat die waarde weer is weggehaald, of dat er een fout was en de waarde NULL is geworden.

Wat ik wil is dat 'launchpad' => $marker['options']['cust_launch'], alleen wordt uitgevoerd als $marker['options']['cust_launch'] bestaat, niet leeg is en niet NULL is.

Wat niet werkt:
if (isset($marker['options']['cust_launch']) && $marker['options']['cust_launch'] != '')
   'launchpad' => $marker['options']['cust_launch']
Dat geeft deze foutmelding:
PHP Parse error:  syntax error, unexpected T_IF, expecting ')'

Offline grizzler

  • Lid
  • Steunpunt: Nee
Re: [php] Conditioneel iets in een array zetten
« Reactie #3 Gepost op: 2014/03/11, 19:36:33 »
Werkt iets als dit niet?
// voor ieder lid met een pin vullen we de array in met aanvullende data uit SMF
foreach ($memberContext as $marker) {

$feature = array(
'type' => 'Feature',
'geometry' => array(
'type' => 'Point',
'coordinates' => array(
round($marker['googleMap']['longitude'], 8),
round($marker['googleMap']['latitude'], 8)
)
),
'properties' => array(
'avatar' => $marker['avatar']['href'],
'smfid' => $marker['id'],
'name' => $marker['name'],
'steunpunt' => $marker['options']['cust_steunp']
)
);

if ( isset($marker['options']['cust_launch']) && !empty($marker['options']['cust_launch']) )
$feature['properties']['launchpad'] = $marker['options']['cust_launch'];

array_push($geojson['features'], $feature);
}

Als ik zelf tegen een 'unexpected' aanloop, kijk ik altijd naar de vorige regel(s), want dan ben ik daar iets vergeten. In dit geval wordt de if gezien terwijl eigenlijk een haakje-sluiten wordt verwacht. Dat wekt bij mij de indruk dat je de if niet helemaal buiten de arraytoewijzing hebt staan.

Offline Rachid

  • Vertaalteam
    • rachidbm
    • Mijn blog
  • Steunpunt: Nee
Re: [php] Conditioneel iets in een array zetten
« Reactie #4 Gepost op: 2014/03/11, 20:53:48 »
Hey Johan,
Wat me wel opvalt is dat je eigenlijk alles in "1 regel" doet (oke, je gebruikt newlines, maar er staat maar 1 puntkomma).
Zelf zou ik beginnen het op te splitsen zodat het wat overzichtelijker wordt, vervolgens kun je dan makkelijker wat logica inbouwen.

Opsplitsen:
foreach ($memberContext as $marker) {
        $geoArray = array(
                'type' => 'Point',
                'coordinates' => array(
                round($marker['googleMap']['longitude'], 8),
                round($marker['googleMap']['latitude'], 8))
        );
        $propertyArray = array(
                'avatar' => $marker['avatar']['href'],
                'smfid' => $marker['id'],
                'name' => $marker['name'],
                'steunpunt' => $marker['options']['cust_steunp'],
                'launchpad' => $marker['options']['cust_launch'],
        );     
        $feature = array(
                'type' => 'Feature',
                'geometry' => geoArray,
                'properties' => $propertyArray
                );
Ik geef geen garantie dat dit precies werkt, maar hopelijk snap je het idee. Hierna kun je dat 'conditionele' inbouwen door iets als het volgende ertussen te stoppen:
$launchpad = 'default value';
if(isset($marker['options']['cust_launch']) {
        $launchpad = $marker['options']['cust_launch'];
}
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline Rachid

  • Vertaalteam
    • rachidbm
    • Mijn blog
  • Steunpunt: Nee
Re: [php] Conditioneel iets in een array zetten
« Reactie #5 Gepost op: 2014/03/11, 20:56:17 »
Dat geeft deze foutmelding:
PHP Parse error:  syntax error, unexpected T_IF, expecting ')'

Dat is een PHP parser error,  omdat je een IF midden in die array declaratie zet. Dat kan niet in PHP. Als je zoals ik voorstelde er verschillende regels/statements van maakt (dus meerdere puntkomma's). Dan kun je die IF er wel ergens tussenzetten ;)
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: [php] Conditioneel iets in een array zetten
« Reactie #6 Gepost op: 2014/03/12, 17:20:11 »
Dank voor de opties :)
De suggestie van Grizzler geeft precies dezelfde array-structuur als mijn originele code en biedt de mogelijkheid voor if-constructies.

De code van Rachid zal ik binnenkort nog testen, die is inderdaad een stuk overzichtelijker al ben ik niet helemaal zeker of de structuur van de array's wel hetzelfde blijft (een array binnen een array, geen idee wat de exacte term is).

Offline lord4163

  • Lid
    • Simpelbuntu
  • Steunpunt: Nee
Re: [php] Conditioneel iets in een array zetten
« Reactie #7 Gepost op: 2014/03/18, 19:45:03 »
@Johan

if(isset($val) && isset($secondVal)) { /// ... }
Meer weten over Ubuntu? Bezoek mijn site dan eens:
Simpelbuntu