15 berichten aan het bekijken - 1 tot 15 (van in totaal 15)
  • Q:
    Bijdrager
    Howl

    meerdere variabels returnen in php

    Hallo,

    Ik ben even een klein functie aan het testen die meerdere variabels zou moeten returnen, maar zo te zien is mijn technische kennis van php nog niet op punt :x

    [code:1:08a5f62e30]<?php

    $test1 = ‘test1’;
    $test2 = ‘test2’;

    function Return_Test($test1,$test2){

    switch($test1){

    case ‘test1’;
    $test1 = ‘testbla’;
    break;

    case ‘test2’;
    $test2 = ‘testbla bla’;
    break;

    }

    switch($test2){

    case ‘test2’;
    $test2 = ‘yipie’;
    break;

    case ‘test2’;
    $test2 = ‘youhou’;
    break;

    }

    return array($test1,$test2);

    }

    ?>

    <html>
    <head>
    <title>Hello</title>
    </head>
    <body>

    <table>
    <tr>
    <td><?php echo Return_Test($test1,$test2); ?></td>
    </tr>
    </table>

    </body>
    </html>[/code:1:08a5f62e30]

    ik weet dat ik een array niet kan echoen, maar hoe kan ik dan de 1 of meerdere variabels laten “afprinten”?

    Bijdrager
    oegemeister

    [code:1:1487d5635e]
    $array = Return_Test($test1, $test2);

    foreach ($array as $key=>$value) {
    echo $value;
    }
    [/code:1:1487d5635e]

    Vermoed ik….

    Btw… functies kun je het beste op een heldere manier benoemen bijv. returnTest (1e woord zonder hoofdletter en daarna elk woord beginnen met een hoofdletter).

    Ook je variabelen wat handige namen meegeven is handig… Houdt je code ook een beetje leesbaar… En vooral in het begin comments schrijven zodat je weet wat je doet…

    [/code]

    Bijdrager
    Howl

    Hoi,

    ben nu op mijn werk dus heb de codes niet bij mij.
    Maar heb wel snel even een andere test gemaakt:

    [code:1:f1f853f8fd]<?php

    $bla = "bla bla";
    $test = "test";

    function test($bla,$test){

    switch($bla){

    case ‘bla bla’:
    $bla = "youhou";
    break;

    }

    switch($test){

    case ‘test’;
    $test = "bla bla test";
    break;

    }

    // return array($bla,$test);

    }

    $return = array($bla,$test);

    ?>

    <html>
    <head>
    <title>Test Functions</title>
    </head>
    <body>

    <?php

    foreach($return as $key=>$value){
    echo $value;
    }

    ?>

    </body>
    </html>
    [/code:1:f1f853f8fd]

    maar hij echot enkel mij variabel $test.
    raar .. ik mis hier iets:)

    Bijdrager
    Howl

    ah heb het gevonden, het moest zoals dit zijn:

    [code:1:2420db4122]<?php
    /*
    * Created on 3 jul 2009
    *
    */

    $bla = "bla bla";
    $test = "test";

    function test($bla,$test){

    switch($bla){

    case ‘bla bla’:
    $bla = "youhou";
    break;

    }

    switch($test){

    case ‘test’;
    $test = "bla bla test";
    break;

    }

    return array($bla,$test);

    }

    $return = test($bla,$test);

    ?>

    <html>
    <head>
    <title>Test Functions</title>
    </head>
    <body>

    <?php

    foreach($return as $key=>$value){
    echo $value;
    }

    ?>

    </body>
    </html>
    [/code:1:2420db4122]

    en nu echoet hij de 2 variabels wel:)

    Thanks voor de hulp!

    Bijdrager
    Howl

    hmmm nu zit wel met een ander ding:)

    het van het ganse gedoe is dat ik een file aanmaak met daarin een paar functies (functies.php) en dan een index.php waarin ik dan de return waardes in laat “afprinten”.
    functies.php zal in de index.php includen dus daar geen probleem, maar heb eigenlijk niet veel zin dat ik in de index.php loops begin te maken.

    Is er een andere optie (buiten Smarty) om dit te kunnen uitvoeren?

    Bijdrager
    oegemeister

    als je de waarden uit een array wilt printen zul je dat met een loop moeten doen… Hoe zou je dat anders willen doen?

    Bijdrager
    Howl

    Ja dat klopt, maar je kan je loops enz in een aparte file stoppen en de resultaten laten tonen op een andere pagina.
    Dit kan je doen met Smarty (template system), maar de bedoeling is dat ik het zou doen zonder Smarty.

    Ipv dat ik de loop in de bv index.php plaats, plaats ik de loop in een andere file en de resultaten laten weergeven op de index.php.

    Zoiets als:

    file functions.php
    [code:1:09d37d89ac]

    function naamfunction(){
    <?php
    /*
    * Created on 3 jul 2009
    *
    */

    $bla = "bla bla";
    $test = "test";

    function test($bla,$test){

    switch($bla){

    case ‘bla bla’:
    $bla = "youhou";
    break;

    }

    switch($test){

    case ‘test’;
    $test = "bla bla test";
    break;

    }

    return array($bla,$test);

    }

    $return = test($bla,$test);

    foreach($return as $key=>$value){
    echo $value;
    }

    ?>

    [/code:1:09d37d89ac]

    en dan in de index.php

    [code:1:09d37d89ac]
    <html>
    <head>
    <title>test</title>

    <body>

    <?php

    echo hier de array, loop,functie enz…

    ?>

    </body>
    </head>
    </html>
    [/code:1:09d37d89ac]

    dit is te doen met Smarty, maar ik wil het zonder templating system doen.
    iemand een idee?

    Bijdrager
    Almerrrrr

    Als je er een functie van maakt en je functions.php pagina include in je index kun je de functie gewoon aanroepen. of mis ik nu wat je wilt bereiken?

    Bijdrager
    DouweM

    Wat is er mis met het aanroepen van een loop in je index?
    En voor wat jij wilt bereiken kun je beter if() dan switch() gebruiken.

    Bijdrager
    Jello

    ik weet dat ik een array niet kan echoen, maar hoe kan ik dan de 1 of meerdere variabels laten “afprinten”?

    Arrays kan je heel eenvoudig printen via

    [code:1:84f78e9dcc]print_r($array)[/code:1:84f78e9dcc]

    eventueel voorgegaan door:
    [code:1:84f78e9dcc]echo "<pre>"[/code:1:84f78e9dcc]
    om de boel leesbaarder te maken;)

    Bijdrager
    DouweM

    En nagegaan door:
    [code:1:72309c0f79]echo "</pre>";[/code:1:72309c0f79]
    om de boel HTML valid te maken;-)
    En verder zijn puntcommas ook wel handig als je geen errors wilt.

    Bijdrager
    Howl

    Hallo,

    Bedankt voor de antwoorden, deze hebben me verder kunnen helpen met mijn testje:)

    Nu ben ik even een stapje verder gegaan en een test db aangemaakt met gebruikers.
    heb daar dan een 2tal gebruikers ingesmeten om nadien ze dan met een functie op te halen (functie die dan in een object zit).:

    ik heb dan 2 files opgemaakt, 1 voor de layout (index.php) en 1 voor de functie(functions.php) (en ook 1 voor de connectie maar dat laten we even opzij.
    ik slaag erin om ze records terug te krijgen met mijn object, maar heb wat last om ze te designen in mijn index.php :x

    ik heb dus in mijn functions.php:

    [code:1:844a5a0824]<?php

    require_once("config.php");

    class Person{

    private $names = array();

    function get_name(){

    $sql = "SELECT * FROM users";
    $query = mysql_query($sql);

    while($row = mysql_fetch_array($query)){

    array_push($this->names,$row[’fname’],$row[’lname’],$row[’age’]);

    }

    return $this->names;

    }

    }

    ?>
    [/code:1:844a5a0824]
    en in mijn index.php
    [code:1:844a5a0824]<?php

    require_once("functions.php");

    ?>

    <html>
    <head>
    <title>Test Functions</title>
    </head>
    <body>

    <?php

    $names = new Person();
    $names->get_name();
    $names_array = $names->get_name();

    ?>

    <table>
    <tr>
    <?php foreach($names_array as $x){ echo "<td>".$x."</td>"; } ?>
    </tr>
    </table>

    </body>
    </html>
    [/code:1:844a5a0824]

    het probleem is dat de data 2x wordt weergegeven, maar dat is normaal omdat ik met 2 loops zit (weet voor de moment niet hoe ik het anders kan doen) en ook dat ze allemaal op 1 dezelfde row worden weergegen.

    Iemand een idee om mij hieruit te werken?:)

    thanks!

    Bijdrager
    Jello

    [code:1:5bed1ed70e]$names = new Person();
    $names->get_name();
    $names_array = $names->get_name(); [/code:1:5bed1ed70e]

    Je roept 2 keer get_name() op ?

    Hierdoor ga je 2 keer de array vullen, 2 keer vullen met dezelfde data, waardoor je dus dubbele data krijgt.

    Bijdrager
    Howl

    ow jah .. dat was stom van me :x

    nu heb ik het inderdaad 1x terug.

    maar ik zit nog wat vast met mijn table.

    [code:1:53b4fe8f63]
    <table>
    <tr>
    <?php foreach($names_array as $x){ echo "<td>".$x."</td>"; } ?>
    </tr>
    </table>
    [/code:1:53b4fe8f63]

    de informatie dat ik terug krijg zou normaal per row moeten zijn.
    maar ik krijg alles 1 row terug zoals dit:

    [code:1:53b4fe8f63]<table>
    <tr>
    <td>voornaam</td>
    <td>achternaam</td>
    <td>27</td>
    <td>voornaam</td>
    <td>achternaam</td>
    <td>23</td>
    </tr>
    </table>
    [/code:1:53b4fe8f63]

    hmmmm

    Bijdrager
    Martens

    Hier een (niet geteste) mock-up. Alles wat je nodig hebt zit erin, maar je moet het even opknippen en verdelen over je eigen code.

    [code:1:4c551688e1]$rows = array();
    $sth = mysql_query("select * from users");
    while($record = mysql_fetch_array($sth)) {
    $rows[] = $record;
    }

    foreach($rows as $record) {
    echo ‘<tr>’;

    foreach($record as $value) {
    echo ‘<td>’ . $value . ‘</td>’;
    }

    echo ‘</tr>’;
    }[/code:1:4c551688e1]

    Wat een mooiere oplossing is, is om een method in je class op te nemen met een naam als ‘display_names’ of iets dergelijks. Die method haalt de records uit de database-tabel op en schrijft ze meteen naar output. Nu dump je alles eerst in het geheugen en vervolgens lees je datzelfde geheugen weer uit om je velden neer te zetten. Het is nitpicking hoor, met zo weinig data, maar als je leert programmeren is het verstandig om jezelf zoveel best practices als mogelijk aan te leren.:)

15 berichten aan het bekijken - 1 tot 15 (van in totaal 15)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.