Comment pousser à la fois la valeur et la clé dans un tableau PHP

355

Jetez un œil à ce code:

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

Je cherche quelque chose comme ça pour que:

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

Existe-t-il une fonction pour ce faire? (parce que array_pushça ne marchera pas comme ça)

Fille
la source

Réponses:

760

Non, il n'y a pas d' array_push()équivalent pour les tableaux associatifs car il n'y a aucun moyen de déterminer la clé suivante.

Vous devrez utiliser

$arrayname[indexname] = $value;
Pekka
la source
10
Je ne comprends pas. N'est-ce pas la façon normale d'ajouter des éléments dans un tableau?
rgin
Comment ajouter plusieurs clés et valeurs à un tableau? par exemple, j'ai [indexname1] = $ value1 et [indexname2] = $ value2, et je veux les ajouter à $ arrayname
King Goeks
8
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2);les définirait comme les seuls éléments de $arrayname. Si vous avez déjà $arraynamedéfini et souhaitez conserver ses valeurs, essayez $arrayname += $anotherarray. Gardez à l'esprit que toutes les clés existantes dans le premier tableau seraient remplacées par le second.
Charlie Schliesser
1
"Gardez à l'esprit que toutes les clés existantes dans le premier tableau seraient écrasées par le second" ce qui n'est pas vrai, le premier tableau a la priorité. si vous le faites $a = array("name" => "John"); $a += array("name" => "Tom");alors $a["name"]sera "John"
santiago arizti
c'est le moyen le plus simple.
NomanJaved du
75

Pousser une valeur dans un tableau crée automatiquement une clé numérique pour elle.

Lorsque vous ajoutez une paire clé-valeur à un tableau, vous avez déjà la clé, vous n'avez pas besoin d'en créer une pour vous. Pousser une clé dans un tableau n'a pas de sens. Vous pouvez uniquement définir la valeur de la clé spécifique dans le tableau.

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

// key already known
$array[$key] = $value;
décomposer
la source
66

Vous pouvez utiliser l'opérateur union ( +) pour combiner des tableaux et conserver les clés du tableau ajouté. Par exemple:

<?php

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

print_r($arr3);

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

Vous pourriez donc faire $_GET += array('one' => 1);.

Il y a plus d'informations sur l'utilisation de l'opérateur union vs array_mergedans la documentation à http://php.net/manual/en/function.array-merge.php .

Charlie Schliesser
la source
4
La différence de base entre l' opérateur array_merge()et +est que lorsque les 2 tableaux contiennent des valeurs sur le même +opérateur clé ignore la valeur du deuxième tableau (ne remplace pas), il ne renumérote pas / ne réindexe pas non plus les touches numériques ...
jave.web
Merci, j'ai essayé de nombreuses fonctions de tableaux mais votre réponse m'a aidé à réaliser ce que je veux,
Danish
21

Je voudrais ajouter ma réponse au tableau et la voici:

//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);

espérons que cela aidera quelqu'un

Nassim
la source
1
J'ai parcouru des dizaines de solutions et c'est la seule qui correspond à mon cas d'utilisation. Je vous remercie!
Ryan Burney
20

Exactement ce que Pekka a dit ...

Alternativement, vous pouvez probablement utiliser array_merge comme ceci si vous le souhaitez:

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

Mais je préférerais probablement la méthode de Pekka car elle est beaucoup plus simple.

Jeffff
la source
11

Je me demande pourquoi la méthode la plus simple n'a pas encore été publiée:

$arr = ['company' => 'Apple', 'product' => 'iPhone'];
$arr += ['version' => 8];
AlexioVay
la source
2
ce n'est pas exactement la même chose, dans array_merge, le tableau de droite gagne en cas de conflit de clé, dans "+ =" le tableau de gauche gagne
santiago arizti
@santiagoarizti Qu'entendez-vous par "gagne"?
AlexioVay
1
si deux tableaux ont à la fois la même clé array_mergeet que union union ( +=) se comporte de la façon opposée, c'est-à-dire array_merge respectera la valeur du deuxième tableau et union union respectera la valeur du premier tableau.
santiago arizti
solution parfaite pour moi. THX pour partager Alexio! :)
ThomasB
8

Ceci est la solution qui peut être utile pour u

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');

Lorsque vous le videz. Le résultat comme celui-ci

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)
Faris Rayhan
la source
7

Je cherchais juste la même chose et j'ai réalisé que, encore une fois, ma pensée est différente parce que je suis de la vieille école. Je retourne à BASIC et PERL et parfois j'oublie à quel point les choses sont vraiment faciles en PHP.

Je viens de faire cette fonction pour prendre tous les paramètres de la base de données où ils sont 3 colonnes. setkey, item (key) & value (value) et placez-les dans un tableau appelé settings en utilisant la même clé / valeur sans utiliser push comme ci-dessus.

Assez facile et simple vraiment

// Obtenir tous les paramètres
$ settings = getGlobalSettings ();


// Appliquer le choix du thème utilisateur
$ theme_choice = $ settings ['theme'];

.. etc etc etc ....




fonction getGlobalSettings () {

    $ dbc = mysqli_connect (wds_db_host, wds_db_user, wds_db_pass) ou die ("Erreur MySQL:". mysqli_error ());
    mysqli_select_db ($ dbc, wds_db_name) ou die ("Erreur MySQL:". mysqli_error ());
    $ MySQL = "SELECT * FROM systemSettings";
    $ result = mysqli_query ($ dbc, $ MySQL);
    while ($ row = mysqli_fetch_array ($ result)) 
        {
        $ settings [$ row ['item']] = $ row ['value']; // PAS BESOIN DE POUSSER
        }
    mysqli_close ($ dbc);
retourner $ settings;
}


Donc, comme les autres articles l'expliquent ... En PHP, il n'est pas nécessaire de "POUSSER" un tableau lorsque vous utilisez

Clé => Valeur

ET ... Il n'est pas non plus nécessaire de définir le tableau en premier.

$ array = array ();

Pas besoin de définir ou de pousser. Attribuez simplement $ array [$ key] = $ value; C'est automatiquement un push et une déclaration à la fois.

Je dois ajouter que pour des raisons de sécurité, (P) ou (H) sans rotation (P), je veux dire programmation pour les nuls, je veux dire PHP .... hehehe je vous suggère d'utiliser ce concept uniquement pour ce que je voulais. Toute autre méthode pourrait constituer un risque pour la sécurité. Là, fait ma décharge!

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

Cela fonctionne très bien. crée la clé avec sa valeur dans le tableau

Mesh Manuel
la source
4
Voté. Cela pousse simplement un nouveau tableau à la fin du $arrtableau existant .
AlexioVay
4

Un peu tard, mais si cela ne vous dérange pas un tableau imbriqué, vous pouvez adopter cette approche:

$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));

Pour clarifier, si vous générez json_encode ($ main_array) qui ressemblera à [{"Key": "10"}]

Pontus B
la source
4

Un peu bizarre, mais cela a fonctionné pour moi

    $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>";
    }
Bjorn Lottering
la source
3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

// affiche le tableau ['key1' => "value1", 'key2' => "value2"]

sneha
la source
2

salut j'ai eu le même problème je trouve cette solution vous devez utiliser deux tableaux puis les combiner tous les deux

 <?php

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

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

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

print_r($c);

?>

référence: w3schools

fantome195
la source
2

Pour ajouter à la première position avec keyetvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;
Bashirpour
la source
2

Pour envoyer une "clé" et une "valeur" à un tableau existant, vous pouvez utiliser l' +=opérateur de raccourci.

Voir cet exemple très simple:

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

Le résultat de print_r($GET)sera:

Array
(
    [one] => 1
)
Nurul Huda
la source
1

Exemple 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);

Tableau ([couleur] => vert, [0] => 2, [1] => 4, [2] => a, [3] => b, [forme] => trapézoïdal, [4] => 4 ,)

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

Ça marche pour moi.

aaa
la source
Cela s'exécute $GET['one']=1, puis utilise la valeur de retour de cette instruction (= 1, la valeur r), puis s'exécute array_push($GET, 1). Résultat = [0] -> 1, [un] -> 1
KekuSemau
0

J'ai écrit une fonction simple:

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

afin que je puisse "inverser" un nouvel élément facilement:

push($my_array, ['a'=>1,'b'=>2])
Elect2
la source
0

Il y a un excellent exemple déjà donné ici. Ajout d'un simple exemple pour pousser les éléments du tableau associatif vers l'index d'index numérique racine.

`$intial_content = array();

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

Je fais habituellement ceci:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
marcnyc
la source