So schieben Sie sowohl Wert als auch Schlüssel in das PHP-Array


355

Schauen Sie sich diesen Code an:

$GET = array();    
$key = 'one=1';
$rule = explode('=', $key);
/* array_push($GET, $rule[0] => $rule[1]); */

Ich suche so etwas, damit:

print_r($GET);
/* output: $GET[one => 1, two => 2, ...] */

Gibt es eine Funktion, um dies zu tun? (weil array_pushes so nicht funktioniert)

Antworten:


759

Nein, es gibt kein array_push()Äquivalent für assoziative Arrays, da es keine Möglichkeit gibt, den nächsten Schlüssel zu bestimmen.

Du musst verwenden

$arrayname[indexname] = $value;

10
Ich verstehe es nicht Ist dies nicht die normale Art, Elemente zu einem Array hinzuzufügen?
Rgin

Wie füge ich einem Array mehrere Schlüssel und Werte hinzu? Zum Beispiel habe ich [indexname1] = $ value1 und [indexname2] = $ value2 und möchte sie zu $ ​​arrayname
King Goeks

8
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);würde sie als die einzigen Elemente in festlegen $arrayname. Wenn Sie die $arraynameWerte bereits festgelegt haben und beibehalten möchten, versuchen Sie es $arrayname += $anotherarray. Beachten Sie, dass alle vorhandenen Schlüssel im ersten Array vom zweiten überschrieben werden.
Charlie Schliesser

1
"Denken Sie daran, dass alle vorhandenen Schlüssel im ersten Array vom zweiten überschrieben werden". Dies ist nicht der Fall, das erste Array hat Priorität. wenn Sie $a = array("name" => "John"); $a += array("name" => "Tom");dann $a["name"]wird „John“
santiago Arizti

Es ist der einfachste Weg.
NomanJaved

75

Wenn Sie einen Wert in ein Array verschieben, wird automatisch ein numerischer Schlüssel dafür erstellt.

Wenn Sie einem Array ein Schlüssel-Wert-Paar hinzufügen, haben Sie bereits den Schlüssel. Sie müssen keinen für Sie erstellen. Das Drücken einer Taste in ein Array macht keinen Sinn. Sie können nur den Wert des spezifischen Schlüssels im Array festlegen.

// no key
array_push($array, $value);
// same as:
$array[] = $value;

// key already known
$array[$key] = $value;

66

Mit dem union-Operator ( +) können Sie Arrays kombinieren und die Schlüssel des hinzugefügten Arrays behalten. Zum Beispiel:

<?php

$arr1 = array('foo' => 'bar');
$arr2 = array('baz' => 'bof');
$arr3 = $arr1 + $arr2;

print_r($arr3);

// prints:
// array(
//   'foo' => 'bar',
//   'baz' => 'bof',
// );

Also könntest du es tun $_GET += array('one' => 1);.

Weitere Informationen zur Verwendung des Gewerkschaftsoperators finden Sie array_mergein der Dokumentation unter http://php.net/manual/en/function.array-merge.php .


4
Der grundlegende Unterschied zwischen array_merge()und +operator besteht darin, dass die +beiden Arrays Werte für denselben Schlüsseloperator enthalten, den Wert aus dem zweiten Array ignorieren (nicht überschreiben) und die numerischen Schlüssel nicht neu nummerieren / neu indizieren ...
jave.web

Vielen Dank, ich habe viele Arrays ausprobiert, aber Ihre Antwort hat mir geholfen, das zu erreichen, was ich will.
Dänisch

21

Ich möchte meine Antwort zur Tabelle hinzufügen und hier ist es:

//connect to db ...etc
$result_product = /*your mysql query here*/ 
$array_product = array(); 
$i = 0;

foreach ($result_product as $row_product)
{
    $array_product [$i]["id"]= $row_product->id;
    $array_product [$i]["name"]= $row_product->name;
    $i++;
}

//you can encode the array to json if you want to send it to an ajax call
$json_product =  json_encode($array_product);
echo($json_product);

hoffe, dass dies jemandem helfen wird


1
Ich habe Dutzende von Lösungen durchgesehen und dies ist die einzige, die zu meinem Anwendungsfall passt. Vielen Dank!
Ryan Burney

20

Genau das, was Pekka gesagt hat ...

Alternativ können Sie array_merge wahrscheinlich wie folgt verwenden, wenn Sie möchten:

array_merge($_GET, array($rule[0] => $rule[1]));

Aber ich würde Pekkas Methode wahrscheinlich vorziehen, da sie viel einfacher ist.


11

Ich frage mich, warum die einfachste Methode noch nicht veröffentlicht wurde:

$arr = ['company' => 'Apple', 'product' => 'iPhone'];
$arr += ['version' => 8];

2
es ist nicht genau dasselbe, in array_merge gewinnt das Array auf der rechten Seite bei einem Schlüsselkonflikt, in "+ =" gewinnt das Array auf der linken Seite
santiago arizti

@santiagoarizti Was meinst du mit "gewinnt"?
AlexioVay

1
Wenn zwei Arrays denselben Schlüssel haben array_mergeund sich Array Union ( +=) in umgekehrter Weise verhält, respektiert Array_merge den Wert des zweiten Arrays und Array Union den Wert des ersten Arrays.
Santiago Aristi

perfekte Lösung für mich. THX für das Teilen von Alexio! :)
ThomasB

8

Dies ist die Lösung, die für u nützlich sein kann

Class Form {
# Declare the input as property
private $Input = [];

# Then push the array to it
public function addTextField($class,$id){
    $this->Input ['type'][] = 'text';
    $this->Input ['class'][] = $class;
    $this->Input ['id'][] = $id;
}

}

$form = new Form();
$form->addTextField('myclass1','myid1');
$form->addTextField('myclass2','myid2');
$form->addTextField('myclass3','myid3');

Wenn Sie es entsorgen. Das Ergebnis ist so

array (size=3)
  'type' => 
    array (size=3)
      0 => string 'text' (length=4)
      1 => string 'text' (length=4)
      2 => string 'text' (length=4)
  'class' => 
    array (size=3)
      0 => string 'myclass1' (length=8)
      1 => string 'myclass2' (length=8)
      2 => string 'myclass3' (length=8)
  'id' => 
    array (size=3)
      0 => string 'myid1' (length=5)
      1 => string 'myid2' (length=5)
      2 => string 'myid3' (length=5)

7

Ich habe nur nach dem gleichen gesucht und festgestellt, dass ich wieder anders denke, weil ich alte Schule bin. Ich gehe den ganzen Weg zurück zu BASIC und PERL und manchmal vergesse ich, wie einfach die Dinge in PHP wirklich sind.

Ich habe gerade diese Funktion gemacht, um alle Einstellungen aus der Datenbank zu übernehmen, in der es sich um 3 Spalten handelt. setkey, item (key) & value (value) und platzieren Sie sie mit demselben Schlüssel / Wert in einem Array namens settings, ohne Push wie oben zu verwenden.

Wirklich ziemlich einfach

// Alle Einstellungen abrufen
$ settings = getGlobalSettings ();


// User Theme Choice anwenden
$ theme_choice = $ settings ['theme'];

.. etc etc etc ....




Funktion getGlobalSettings () {

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) oder sterben ("MySQL Error:". mysqli_error ());
    mysqli_select_db ($ dbc, wds_db_name) oder sterben ("MySQL Error:". mysqli_error ());
    $ MySQL = "SELECT * FROM systemSettings";
    $ result = mysqli_query ($ dbc, $ MySQL);
    while ($ row = mysqli_fetch_array ($ result)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; // KEINE DRÜCKBEDARF
        }}
    mysqli_close ($ dbc);
$ settings zurückgeben;
}}


So wie die anderen Beiträge erklären ... In PHP ist es nicht erforderlich, ein Array zu "DRÜCKEN", wenn Sie verwenden

Schlüssel => Wert

UND ... Es ist auch nicht erforderlich, zuerst das Array zu definieren.

$ array = array ();

Sie müssen nicht definieren oder pushen. Weisen Sie einfach $ array [$ key] = $ value zu. Es ist automatisch ein Push und eine Erklärung zugleich.

Ich muss hinzufügen, dass aus Sicherheitsgründen, (P) oder (H) elpless (P) Rotation, ich meine Programmierung für Dummies, ich meine PHP ... hehehe, ich schlage vor, dass Sie dieses Konzept nur für das verwenden, was ich beabsichtigt habe. Jede andere Methode kann ein Sicherheitsrisiko darstellen. Dort machte mein Haftungsausschluss!


5
array_push($arr, ['key1' => $value1, 'key2' => value2]);

Das funktioniert gut. Erstellt den Schlüssel mit seinem Wert im Array


4
Abgestimmt. Dadurch wird nur ein neues Array am Ende des vorhandenen $arrArrays verschoben.
AlexioVay

4

Ein bisschen spät, aber wenn Ihnen ein verschachteltes Array nichts ausmacht, können Sie diesen Ansatz wählen:

$main_array = array(); //Your array that you want to push the value into
$value = 10; //The value you want to push into $main_array
array_push($main_array, array('Key' => $value));

Wenn Sie json_encode ($ main_array) ausgeben, sieht dies zur Verdeutlichung wie folgt aus: [{"Key": "10"}]


4

Ein bisschen komisch, aber das hat bei mir funktioniert

    $array1 = array("Post Slider", "Post Slider Wide", "Post Slider");
    $array2 = array("Tools Sliders", "Tools Sliders", "modules-test");
    $array3 = array();

    $count = count($array1);

    for($x = 0; $x < $count; $x++){
       $array3[$array1[$x].$x] = $array2[$x];
    }

    foreach($array3 as $key => $value){
        $output_key = substr($key, 0, -1);
        $output_value = $value;
        echo $output_key.": ".$output_value."<br>";
    }

3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

// druckt Array ['key1' => "value1", 'key2' => "value2"]


2

Hallo, ich hatte das gleiche Problem. Ich finde diese Lösung. Du solltest zwei Arrays verwenden und dann beide kombinieren

 <?php

$fname=array("Peter","Ben","Joe");

$age=array("35","37","43");

$c=array_combine($fname,$age);

print_r($c);

?>

Referenz: w3schools



2

Zum Hinzufügen zur ersten Position mit keyundvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

2

Um einen "Schlüssel" und einen "Wert" in ein vorhandenes Array zu drücken, können Sie den +=Verknüpfungsoperator verwenden.

Siehe dieses sehr einfache Beispiel:

$GET = [];
$GET += ['one' => 1];

Das Ergebnis von print_r($GET)wird sein:

Array
(
    [one] => 1
)

1

Beispiel array_merge () ....

$array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result);

Array ([Farbe] => Grün, [0] => 2, [1] => 4, [2] => a, [3] => b, [Form] => Trapez, [4] => 4 ,)


1
array_push($GET, $GET['one']=1);

Für mich geht das.


Dies wird ausgeführt $GET['one']=1, verwendet dann den Rückgabewert dieser Anweisung (= 1, der r-Wert) und wird dann ausgeführt array_push($GET, 1). Ergebnis = [0] -> 1, [eins] -> 1
KekuSemau

0

Ich habe eine einfache Funktion geschrieben:

function push(&$arr,$new) {
    $arr = array_merge($arr,$new);
}

damit ich leicht neue Elemente "uppsert" kann:

push($my_array, ['a'=>1,'b'=>2])

0

Es gibt hier bereits einige großartige Beispiele. Fügen Sie einfach ein einfaches Beispiel hinzu, um assoziative Array-Elemente in den numerischen Index des Stammindex zu verschieben.

`$intial_content = array();

if (true) {
 $intial_content[] = array('name' => 'xyz', 'content' => 'other content');
}`

0

Normalerweise mache ich das:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.