[opgelost] script naar array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom aan t Goor

Tom aan t Goor

31/12/2012 19:23:31
Quote Anchor link
Ik wil een script maken dat er ongeveer zo uitziet:

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
<?php
function maakarray(){
    $args = func_get_args();
    $total = 0;
    foreach($args as $arg)
    {

        
        // !@#$%^&*() \\
        
        $total = $total + 1;
    }
}


maakarray("naam", "Tom", "leeftijd", "26", "woonplaats", "Amsterdam");

?>


Er staat "naam", "Tom", "leeftijd", "26", "woonplaats", "Amsterdam".
Nu wil ik dat daarvan een array word gemaakt die er zo uit komt te zien:

$array[naam] = "Tom";
$array[leeftijd] = "26";
$array[woonplaats] = "Amsterdam";

Heeft iemand enig idee hoe ik dit kan aanpakken?

In mijn script heb ik gebruik gemaakt van foreach(..), ik denk niet dat dit kan werken aangezien je 2 waardes nodig hebt om een array te vormen.

Toevoeging op 31/12/2012 19:30:53:

Het is me gelukt.
Het was een simpel if(..) formuletje toepassen, waar ik niet aan had gedacht.

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
<?php
function maakarray(){
    $args = func_get_args();
    $total = 1;
    foreach($args as $arg)
    {

        if( ($total/2) != round($total/2) ){
            $arraynaam = $arg;
        }
else{
            $array[$arraynaam] = $arg;
        }

        $total = $total + 1;
    }

    print_r($array);
}


maakarray("naam", "Tom", "leeftijd", "26", "woonplaats", "Amsterdam");

?>
Gewijzigd op 31/12/2012 19:31:05 door Tom aan t Goor
 
PHP hulp

PHP hulp

26/12/2024 09:32:31
 
Eddy E

Eddy E

31/12/2012 19:32:36
Quote Anchor link
Je zou zoiets kunnen proberen:

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
<?php
    function maakArray()
    {

        // makkelijk maken
        $argumenten = func_get_args();
        $aantal = count($aantal);    // of func_num_args() gebruiken?

        // zijn er wel argumenten... en zijn ze in 2-tallen?

        if($aantal == 0 OR ($aantal % 2) != 0)
        {

            return false;
        }


        // argumenten aflopen: stappen van 2 nemen
        for($i = 0; $i <= func_num_args; $i += 2)
        {

            // nieuwe array maken met huidige sleutel... en +1 is dus de waarde
            $array[$argumenten[$i]] = $argumenten[$i + 1];
        }


        // returnen
        return $array;

    }

?>



Toevoeging op 31/12/2012 19:33:14:

Ja, gut .... gaat ie tijdens het maken van mijn antwoord met een eigen (vergelijkbaar) antwoord komen. Zo jammer...

Toevoeging op 31/12/2012 19:34:53:

Trouwens: wat jij hier doet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 if( ($total/2) != round($total/2) ) { ... }
?>


Kan beter zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($total % 2 != 0) { ... }
?>
 
Tom aan t Goor

Tom aan t Goor

31/12/2012 19:47:45
Quote Anchor link
Eddy Erkelens op 31/12/2012 19:32:36:
Trouwens: wat jij hier doet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 if( ($total/2) != round($total/2) ) { ... }
?>


Kan beter zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($total % 2 != 0) { ... }
?>


Alsnog bedankt voor je reactie.
En ik snap niet wat er bij deze if gebeurt, aangezien ik zo iets nog nooit heb gezien.
Kan je me dit uitleggen?
 
Eddy E

Eddy E

31/12/2012 20:07:34
Quote Anchor link
% is modulus.
8 / 2 = 4 natuurlijk.
9 / 2 = 4.5.
8 % 2 = 0, want je kan het delen door de 2 ZONDER REST.
9 % 2 = 1, want je kan 4x2 doen, en dan hou je nog 1 over.

2.50 % 0.50 = 0 (want je kan 5x 0,50 doen)
2,51 % 0.50 = 0.01 (want die hou je over).

Dus eigenlijk een berekenaar van de rest (deelsommen met rest).

Toevoeging op 01/01/2013 12:58:49:

Maar goed... wat is nou makkelijker?

Zo'n functie met deze aanroep:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$array
= maakarray("naam", "Tom", "leeftijd", "26", "woonplaats", "Amsterdam")
?>


Of gewoon direct array maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$array
('naam' => 'Tom', 'leeftijd' => 26, 'Woonplaats' => 'Amsterdam');
?>


Eventueel via PHP-'s functies:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$array
= parse_url("naam=Tom&leeftijd=26&Woonplaats=Amsterdam");
?>


Persoonlijk vind ik de onderste dan toch echt makkelijker, beter en logischer.
Gewijzigd op 31/12/2012 20:08:17 door Eddy E
 
Tom aan t Goor

Tom aan t Goor

07/01/2013 11:29:56
Quote Anchor link
@Eddy,

Om nog even terug te komen op de volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($total % 2 != 0) { ... }
?>


Nu is dit het resultaat:
$total = 10; <- if() wordt niet uitgevoerd.
$total = 10.5 <- if() wordt wel uitgevoerd.
$total = 11 <- if() wordt wel uitgevoerd.

Dat komt omdat je heb eerst enkele keren door 2 deelt en krijg je bij het getal 11 dus nog 1 over. (Dit is dus voor alle oneven getallen).

Moet dit dan niet de code worden?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($total % 2 != (0 && 1)) { ... }
?>
Gewijzigd op 07/01/2013 11:30:54 door Tom aan t Goor
 
Moose -

Moose -

07/01/2013 11:38:53
Quote Anchor link
Nee want dan kan je beter checken of je waarde een integer is
 
Kris Peeters

Kris Peeters

07/01/2013 11:40:06
Quote Anchor link
Tom Tom op 07/01/2013 11:29:56:
Moet dit dan niet de code worden?

Ik heb de rest niet gevolgd, maar het zou me verwonderen.

(0 && 1) gaat altijd 0 geven; en is dus vrij ... nutteloos.

if($total % 2)

is, strikt gezien, trouwens voldoende.
Gewijzigd op 07/01/2013 11:49:05 door Kris Peeters
 
Tom aan t Goor

Tom aan t Goor

07/01/2013 13:20:55
Quote Anchor link
Kris Peeters op 07/01/2013 11:40:06:
Tom Tom op 07/01/2013 11:29:56:
Moet dit dan niet de code worden?

Ik heb de rest niet gevolgd, maar het zou me verwonderen.

(0 && 1) gaat altijd 0 geven; en is dus vrij ... nutteloos.

if($total % 2)

is, strikt gezien, trouwens voldoende.


Dan werkt het wel bij even getallen maar niet bij oneven?
 
Kris Peeters

Kris Peeters

07/01/2013 14:14:04
Quote Anchor link
Wel ja; dit is precies een techniek die je kan gebruiken om even/oneven te detecteren/berekenen.

Als je zowel de even als de oneven getallen nodig hebt, is deze if() uiteraard nutteloos, en kan je ze simpelweg weglaten.


maar uhh...
Zoals ook Eddy zei, het is juist een reactie op lijn 7 (2e code blok) van jouw eerst post. Die lijn kan anders geschreven worden; korter en logischer.

if( ($total/2) != round($total/2) ){
=
if($total % 2 != 0)
=
if($total % 2)


Die lijn code is jouw code. Dus: wat bedoelde jij met die lijn?
Gewijzigd op 07/01/2013 14:15:42 door Kris Peeters
 



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.