Ik kan een stukje PHP dat een array oplevert niet in een functie onderbrengen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henk van Huffelen

Henk van Huffelen

24/02/2015 17:08:33
Quote Anchor link
Hallo,
Hoewel ik al een jaar of 10 met PHP bezig ben en vele forums heb doorgesnuffeld om antwoorden te vinden, heb ik nog nooit een forum gekozen om daar zelf vragen te plaatsen. Nu heb ik iets wat ik nergens kan vinden.
Ik ben nu voor het eerst echt bezig met zaken als PDO en arrays. Heb voor die tijd veel programmaregels geschreven waarvan ik nu weet dat het veel efficienter kan.
Ik heb deze functie gemaakt, komtie:

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
function getDataFromDB()
{
//In: nothing at the moment, 4 parameters in future
//Out: array

try{
    $stmt = $conn->query('SELECT Countrycode, Country_fr FROM Country');
    $Country_data = $stmt->fetchAll(PDO::FETCH_ASSOC);}
catch(PDOException $e)    {  echo "Country not found ";} //. $e->getMessage()
//echo 'Test'.'<pre>' . print_r($Country_data, true) . '</pre>';
    $arrlength = count($Country_data);
    for($x = 0; $x < $arrlength; $x++) {
        $pc= $Country_data[$x]['Countrycode'];
        $qc= $Country_data[$x]['Country_fr'];
           $ac[]=$pc;
        $bc[]=$qc;
  }
    $countryarray = array_combine($ac, $bc);    
    //print_r($countryarray);
return $countryarray;  
}      //end function GetDataFromDB


het stuk startend met try en eindigend op de returnregel werkt, letterlijk gecodeerd, perfect en wordt verderop in een foreach gebruikt op een invoerpagina.
De eerste print_r levert (klein stukkie):
Array
(
    [0] => Array
        (
            [Countrycode] => A
            [Country_fr] => Autriche
        )

    [1] => Array
        (
            [Countrycode] => AA
            [Country_fr] => AutrrappSousRemarks
        )

    [2] => Array
        (
            [Countrycode] => AL
            [Country_fr] => Albanie
        )
Etc)
De tweede print_r:
Array ( [A] => Autriche [AA] => AutrrappSousRemarks [AL] => Albanie [AND] => Andorre [AO] => Angola [BE] => Belgique  etc)
Zet ik het in deze functie (dus 4 regels vooraf en 1 er achteraan, dan krijg ik de array er niet uit, mijn menu blijft zichtbaar en verder is de pagina egaal groen in de gewenste stijl.
Ik probeer de aanroep zo op te pakken, buiten de functie:
$countryarray = getDataFromDB();
Wie kan helpen?
[modedit="- Aar  -"]Gelieve in het vervolg bij code de [[b][/b]code][[b][/b]/code]-tags gebruiken.
[url=http://www.phphulp.nl/veel-gestelde-vragen/#bbcode]Hier[/url] kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt![/modedit]
Gewijzigd op 24/02/2015 17:31:30 door - Ariën -
 
PHP hulp

PHP hulp

06/05/2024 16:13:45
 
Thomas van den Heuvel

Thomas van den Heuvel

24/02/2015 17:17:35
Quote Anchor link
Volgens mij kun je, als je twee kolommen ophaalt, dit ook rechtstreeks in een array van key => value paren zetten met PDO::FETCH_KEY_PAIR (vanaf PHP 5.3.2). Als dit je opzet is lijkt mij dit simpeler dan gegoochel met arrays :).

EDIT: ook is $conn waarschijnlijk ongedefinieerd binnen je functie?
Gewijzigd op 24/02/2015 17:20:35 door Thomas van den Heuvel
 
Henk van Huffelen

Henk van Huffelen

24/02/2015 19:56:03
Quote Anchor link
Aan "Aar": OK PHP code vet gedrukt
Aan Thomas: $conn is buiten de functie gedefinieerd. Is dat dan de reden dat het niet werkt?
Ik probeer de vraag nog iets scherper te maken: Waarom werkt het stukje "try" tm return zonder functie er omheen wel goed en datzelfde stuk binnen de functie niet?
 
Thomas van den Heuvel

Thomas van den Heuvel

24/02/2015 20:18:44
Quote Anchor link
functies hebben hun eigen scope (domein waarbinnen variabelen geldig/bekend/gedefinieerd zijn):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$test
= 'whatever';

function
hoi() {
    // deze functie kent het bestaan van $test niet
}
?>


Je kunt een variabele doorgeven aan een functie via een parameter of via het keyword global toegankelijk maken, al is de laatste manier niet echt aan te raden.

Dit is vrij elementaire theorie die niet echt PHP-specifiek is.
 
Henk van Huffelen

Henk van Huffelen

24/02/2015 20:56:12
Quote Anchor link
Hoi Thomas,
Nou, die $conn is inderdaad de bottleneck. Ondanks dat ik al heel veel jaren met PHP bezig ben en daarvoor met Clipper/dbase en nog eerder met Turbo-Pascal, ben ik geen professional en gaat er soms bijna jaar voorbij zonder dat ik veel regels programma maak. Ik kan het zelf nu niet meer voorstellen, maar ik had heel erg weinig met functies geregeld. Dat is ook precies waarom de website dreigt vast te lopen. Ik ben nu een kwaliteitsslag aan het maken en ondertussen veel bij te leren. Dank voor je hulp!. Het werkt.
 



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.