webForumDet fria alternativet

Mixed

9 svar · 284 visningar · startad av Nexus86

Nexus86Medlem sedan okt. 20022 683 inlägg
#1

Hur gör man så en parameter får mixed som typ? D.v.s, jag gör en funktion som sparar värden i en array och vill att användaren av funktionen (d.v.s kodaren) ska få lägga till hur många värden som helst i en enda anropning, kan jag göra som nedan?

$array = array();

function addtoarray($mixed) {
    array_push($array, $mixed);
}

addtoarray('index1' => 'nummer1', 'index2' => 'nummer2');

Nu är väl kanske inte detta bästa sättet att göra det på men det är bara ett exempel. Användningen av det kommer bli mycket användbar. :)

MatteMedlem sedan aug. 20002 970 inlägg
#2

Hur hade du tänkt att du skulle läggas in av användaren ?

Du kan ju på något sätt samla upp eller göra om till array det användaren vill lägga till. Har du ett formulär så kallar du alla fält

<input type="text" name="add[]">

Då får du en array du kan lägga till.

Du kan också låta användaren lägga upp sina värden med skiljetecken emellan, t.ex semikolon eller |. Då delar du med explode() och lägger till arrayen.

Nexus86Medlem sedan okt. 20022 683 inlägg
#3

Menade inte användaren av sidan. Menade kodaren, dvs användaren av funktionen. ;)

MatteMedlem sedan aug. 20002 970 inlägg
#4

Då är det väl lämpligt att kodaren lägger till sina värden som en array.

Men detta är det onödigt att bygga en särskild funktion för, när det redan finns ett flertal du kan använda: array_merge, array_push, array_unshift

Nexus86Medlem sedan okt. 20022 683 inlägg
#5

Poängen var så att jag undrade om det går att göra (vilket det borde eftersom jag sett det förr). Har tänkt ha funktionen i en klass och tänkte mig ett mer beskrivande namn. Om vi säger att jag vill spara värden i klassen.

class values {
    var $var_array = array();
    var $const_array = array();

    function addVars($mixed_vars) {
        $this->var_array = array_push($this->var_array, $mixed_vars);
    }

    function addConst($mixed_const) {
        $this->const_array = array_push($this->const_array, $mixed_const);
    }
}

Därav en av orsakerna till att jag vill veta hur man gör.

Detta är även det endast ett exempel. :)

Nexus86Medlem sedan okt. 20022 683 inlägg
#6

Såg nu att jag inte alls sett exakt som jag vill ha. Det jag hade sett gjorde på ungefär samma sätt fast de använde en array som parameter och inte som jag trodde.

Eftersom att jag tolkar det du sa till vad jag ville ha så får ditt svar bli lösningen på tråden. :)

Fast frågan kvarstår, går det att få det som jag skrev i mina andra inlägg? Kan alltid vara bra att veta. :)

MatteMedlem sedan aug. 20002 970 inlägg
#7

Eftersom jag inte förstår riktigt vad du försöker göra, kan jag tyvärr inte ge dig någon lösning, men detta kan kanske ge dig några idéer:

class values {

    var $var_array = array();
    var $const_array = array();

    function addVars($mixed_vars) {
        if (!is_array($mixed_vars)) {
           $mixed_vars = explode("|", $mixed_vars);
        }
        $this->var_array = array_merge($this->var_array, $mixed_vars);
    }

    function addConst($mixed_const) {
        if (!is_array($mixed_const)) {
           $mixed_const = explode("|", $mixed_const);
        }
        $this->const_array = array_merge($this->const_array, $mixed_const);
    }

}

$values = new values;

$add = array('hej', 'hopp'); // array
$values->addVars($add);

$add = 'i|lingonskogen'; // string
$values->addVars($add);

$add = 'tjo flöjt'; // string
$values->addVars($add);

print_r($values->var_array);

Vill du ha associativa arrayer får du utveckla strängomvandlingen lite.

Nexus86Medlem sedan okt. 20022 683 inlägg
#8

Just nu har jag det så som du skrev i ditt senaste inlägg men jag tänkte mer på om det gick på något sätt att göra som i första inlägget. (Titta nu. Har ändrat lite för att du lättare ska förstå).

Detta är dock ingen nödvändighet eftersom jag får till det på ett annat sätt. Tänkte endast göra koden så nybörjarvänlig som möjligt så de slipper skapa arrayerna själva och därför undrar jag endast om det går.

MatteMedlem sedan aug. 20002 970 inlägg
#9

Det går ju att göra så här:

$array = array();

function addtoarray($array, $mixed) {

    eval("\$add = array($mixed);");

    return array_merge($array, $add);

}

$array = addtoarray($array, "'index1' => 'nummer1', 'index2' => 'nummer2'");

Men det är det knappast någon finess med eftersom det går lika bra att göra så här:

$array = array_merge($array, array('index1' => 'nummer1', 'index2' => 'nummer2'));
Nexus86Medlem sedan okt. 20022 683 inlägg
#10

Vet att det inte är någon finess. Det var inte meningen heller. Det var mer en fundering än en lösning. :)

Tack!

Genererad på 362 ms · cache AV · v20260730165559-full.f96bc7eb