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)

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;

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;

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 .


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


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.


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];

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)

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!


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

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


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"}]


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>";
    }

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

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


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



2

Pour ajouter à la première position avec keyetvalue

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;

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
)

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 ,)


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

Ça marche pour moi.


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])

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

0

Je fais habituellement ceci:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.