442 votes

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

Jetez un coup d'oeil à 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 faire cela ? (parce que array_push ne fonctionnera pas de cette façon)

937voto

Pekka 웃 Points 249607

Non, il n'y a pas 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;

0 votes

Comment ajouter plusieurs clés et valeurs à un tableau ? Par exemple, j'ai [indexname1] = $value1 et [indexname2] = $value2, et je veux les ajouter à $arrayname.

13 votes

@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2); les définiraient comme les seuls éléments dans $arrayname . Si vous avez déjà $arrayname et que vous souhaitez conserver ses valeurs, essayez $arrayname += $anotherarray . Gardez à l'esprit que toutes les clés existantes dans le premier tableau seront écrasées par le second.

2 votes

"Gardez à l'esprit que toutes les clés existantes dans le premier tableau seraient écrasées par le second" ce n'est pas vrai, le premier tableau a la priorité. si vous faites $a = array("name" => "John"); $a += array("name" => "Tom"); puis $a["name"] sera "John"

100voto

deceze Points 200115

Pousser une valeur dans un tableau crée automatiquement une clé numérique pour celle-ci.

Lorsque vous ajoutez une paire clé-valeur à un tableau, vous avez déjà la clé, vous n'avez pas besoin qu'elle soit créée 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;

85voto

Charlie S Points 1321

Vous pouvez utiliser l'opérateur d'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 d'union par rapport à l'opérateur d'union. array_merge dans la documentation à l'adresse http://php.net/manual/en/function.array-merge.php .

5 votes

La différence fondamentale entre array_merge() y + l'opérateur est lorsque les 2 tableaux contiennent des valeurs sur la même clé + L'opérateur ignore la valeur du second tableau (il ne la remplace pas), il ne renumérote pas non plus les clés numériques...

0 votes

Merci, j'ai essayé de nombreuses fonctions de tableaux mais votre réponse m'a aidé à obtenir ce que je voulais,

20voto

pssdbt Points 777

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.

9voto

Cory Cullers Points 29

Je cherchais justement la même chose et j'ai réalisé qu'une fois de plus, ma façon de penser est différente parce que je suis de la vieille école. J'ai remonté jusqu'à BASIC et PERL et j'oublie parfois combien les choses sont faciles en PHP.

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

Assez facile et simple, vraiment

// Get All Settings
$settings=getGlobalSettings();

// Apply User Theme Choice
$theme\_choice = $settings\['theme'\];

.. etc etc etc ....

function getGlobalSettings(){

    $dbc = mysqli\_connect(wds\_db\_host, wds\_db\_user, wds\_db\_pass) or die("MySQL Error: " . mysqli\_error());
    mysqli\_select\_db($dbc, wds\_db\_name) or die("MySQL Error: " . mysqli\_error());
    $MySQL = "SELECT \* FROM systemSettings";
    $result = mysqli\_query($dbc, $MySQL);
    while($row = mysqli\_fetch\_array($result)) 
        {
        $settings\[$row\['item'\]\] = $row\['value'\];   // NO NEED FOR PUSH
        }
    mysqli\_close($dbc);
return $settings;
}

Donc, comme les autres messages l'expliquent... En php, il n'y a pas besoin de "PUSH" un tableau quand vous utilisez

Clé => Valeur

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

$array=array() ;

Il n'est pas nécessaire de définir ou de pousser. Assignez simplement $array[$key] = $value ; C'est automatiquement un push et une déclaration en même temps.

Je dois ajouter que pour des raisons de sécurité, (P)oor (H)elpless (P)rotection, je veux dire Programmation pour les nuls, je veux dire PHP.... hehehe je vous suggère d'utiliser ce concept uniquement pour ce que j'ai prévu. Toute autre méthode pourrait constituer un risque pour la sécurité. Voilà, j'ai fait mon disclaimer !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X