elementen toevoegen met array_push

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan West

Johan West

21/05/2015 12:00:33
Quote Anchor link
Ik wil via de browser elementen aan een array genaamd $reeks toevoegen
Hiervoor heb ik de volgende code geschreven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$var
= $_POST["var"];
function
addIntoArray($var)
                    {

            global $reeks;
            if (($var != ".") || ($var != ".."))
                    {

                           array_push($reeks, $var);
                           echo $var . " Is aan de array toegevoegd!";
                    }

            return;
}

?>



Het probleem is echter niet dat ik een foutmelding krijg, maar dat het scherm totaal geen output geeft, terwijl ik toch een echo regel heb aangemaakt.

Wat gaat hier fout?
 
PHP hulp

PHP hulp

26/04/2024 00:08:57
 
- SanThe -

- SanThe -

21/05/2015 12:11:21
Quote Anchor link
De function wordt nergens aangeroepen.
En $reeks is nergens gedefinieerd.
Gewijzigd op 21/05/2015 12:12:58 door - SanThe -
 
Johan West

Johan West

21/05/2015 12:20:46
Quote Anchor link
$reeks is een bestaande array. Op welke wijze (en met welke reden) moet dit gedefinieerd worden?
 
- SanThe -

- SanThe -

21/05/2015 12:22:02
Quote Anchor link
Als die al ergens bestaat is er geen probleem.
 
Johan West

Johan West

21/05/2015 12:39:09
Quote Anchor link
Ik heb een ander script waarin de array $reeks is aangemaakt met 4 elementen.

Hoe kan het dat er geen output is van de echo regel?
Kan dat te maken hebben met de plaats/directory (1 level hoger) waarin deze scripts zich bevinden?
Gewijzigd op 21/05/2015 12:41:31 door Johan West
 
- SanThe -

- SanThe -

21/05/2015 12:41:25
Quote Anchor link
- SanThe - op 21/05/2015 12:11:21:
De function wordt nergens aangeroepen.
 
Willem vp

Willem vp

21/05/2015 12:59:41
Quote Anchor link
Even iets anders:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (($var != ".") || ($var != ".."))

zal altijd waar zijn (tenzij $var zowel de waarde '.' als '..' heeft, maar dat is onmogelijk). Waarschijnlijk bedoel je && in plaats van || ;-)
 
Johan West

Johan West

21/05/2015 17:27:07
Quote Anchor link
OK jullie zijn fantastische hulpmiddelen. Het script werkt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/05/2015 18:08:57
Quote Anchor link
Wij zijn geen hulpmiddelen. Wij zijn gewoon mensen die dezelfde interesse hebben als jou. En natuurlijk zijn er dan onder ons die al (wat) verder zijn dan jou ;-)
Gewijzigd op 21/05/2015 18:09:13 door Frank Nietbelangrijk
 
Johan West

Johan West

21/05/2015 23:24:50
Quote Anchor link
Het is klasse wat jullie doen mannen.

Voorlopig moet ik het hier van hebben. Ik zoek echt naar goede info online (NL of ENG) over PHP en naast praktische code wil ik meer weten over de principes zoals definiëren, declaraties en type signature.

Stomweg code 'overtypen' en copypasten is op zich okay, maar je wilt toch wat meer weten over de achtergronden, maar echt veel vind je niet online ook niet in boeken.

Hoe hebben jullie je kennis van PHP opgedaan? Schoolboeken? Cursussen? Ben ik eigenlijk wel benieuwd naar.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

22/05/2015 00:35:38
Quote Anchor link
Toch is er genoeg te vinden op internet. Wat wel een nadeel is van internet is dat veel artikelen verouderd zijn en dat heb je soms niet in de gaten. Maar behalve dat heb je al aan youtube gedacht? phptuts.nl? http://knpuniversity.com?
 
Marthijn Buijs

Marthijn Buijs

22/05/2015 07:58:43
Quote Anchor link
Zes jaar terug ben ik ook begonnen net zoals jouw met overtypen en dergelijke, maar als je dat al aantal jaren doet krijg je echt wel heel veel meer verstand van PHP, als je er genoeg experimenteerd natuurlijk ;)
 
Thomas van den Heuvel

Thomas van den Heuvel

22/05/2015 14:33:38
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
function addIntoArray($var) {
    global $reeks;
    if (($var != ".") && ($var != "..")) { // || gewijzigd in &&
        array_push($reeks, $var);
        echo $var . " Is aan de array toegevoegd!";
    }

    return;
}

?>

Ook al doet deze functie wat ze (waarschijnlijk) zou moeten doen, zitten aan deze opzet een aantal nadelen:
- de functie bevat een "hard coded" element, wat de herbruikbaarheid van deze functie teniet doet
- de functie drukt altijd tekst af, dit is handig voor debugging / ontwikkeling, maar daarbuiten is het waarschijnlijk storend of gewoon onwenselijk
- de functie geeft geen "status" terug of de bewerking is geslaagd, dit doe je nu middels een echo, maar waarschijnlijk is het handiger om een boolean (true of false) terug te geven die aangeeft of de bewerking is geslaagd

Alle bovenstaande punten zijn verwerkt in de volgende aangepaste variant:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function addIntoArray($value, &$array) {
    if ($value !== '.' && $value !== '..') {
        $array[] = $value;
        return true;
    }

    return false;
}

?>

Hierbij geef je een (geheugen)verwijzing naar het array mee via de tweede parameter. De & geeft aan dat deze parameter call by reference is. De functie zelf retourneert een boolean die aangeeft of de bewerking is geslaagd. Deze functie kun je dus nu voor een willekeurig array aanroepen (deze is niet langer beperkt tot $reeks) waarbij je een verwijzing naar het array meegeeft.

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$reeks
= array('a', 'b', 'c');

// let op - geen & in aanroep!
if (addIntoArray('d', $reeks)) {
    echo 'toevoegen geslaagd';
}
else {
  echo 'toevoegen mislukt';
}


// dump informatie naar je scherm
echo '<pre>'.print_r($reeks, true).'</pre>';
?>

Uitgaande van die '.' en '..' maak ik hieruit op dat je iets met directories / directory-structuren aan het doen bent? Als je functies wilt bundelen die soortgelijke acties uitvoeren (op bijvoorbeeld directories) dan zou je ook kunnen overwegen om hiervoor een class te schrijven, maar dat onderwerp (dit valt onder object georiënteerd programmeren) is voor de wat gevorderde gebruikers.
 
Johan West

Johan West

23/05/2015 11:44:57
Quote Anchor link
Nee ik ben niets aan het doen met directory structuren. (Ik heb dit stukje code zo gevonden op internet) Maar de werking is soms niet helder.

$value moet eigenlijk gewoon een input zijn, dus een variabele die ingegeven is via een invoerformulier <input>
Dit moet er eerst 1 zijn, later wordt dit uitgebreid tot meer en kunnen bijv. 40 nieuwe variabelen worden ingegeven.
Gewijzigd op 23/05/2015 11:45:42 door Johan West
 
Johan West

Johan West

27/05/2015 12:45:16
Quote Anchor link
Ok ik stop met deze manier van het maken van databases. Ik ga overstappen op MYSQL/phpmyadmin.
 



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.