1
votes

Comment ajouter une nouvelle paire clé / valeur à un objet en PHP?

Je suppose que ma question est double

En Python si je fais ça

$person = [0 => {name: "Jake", age: 22, height: "2m"},
          1 => {name: "Chris", age: 34, height: "3m"}];

J'ai créé un dictionnaire

En javaScript si je fais la même chose, j'ai créé un objet

Qu'est-ce que c'est en PHP? Il se peut que je ne connaisse pas les termes

Je travaille sur un projet avec laravel. J'ai essentiellement une base de données sqlite à laquelle j'accède. Ceci renvoie un tableau d '«objets» (en termes javaScript). Je veux faire une boucle foreach à travers les 'objets' dans le tableau et je veux ajouter une nouvelle clé et une nouvelle valeur à 'objet'.

Deuxièmement - Désolé, je ne suis pas sûr à 100% de la syntaxe- en php:

$person = [0 => {name: "Jake", age: 22},
           1 => {name: "Chris", age: 34}];

Encore une fois, je suis vraiment désolé pour la syntaxe, je reçois le tableau directement de la base de données sqlite donc ce n'est pas trop important à ce sujet étape.

Ma question est la suivante: si je veux ajouter par exemple une hauteur à chaque personne, comment puis-je faire cela? Permettez-moi de reformuler cela, je sais que faire une boucle dans le tableau avec un foreach, j'ai juste besoin de la commande qui me permettra d'ajouter une nouvelle paire clé / valeur à la fin d'un dictionnaire / objet / ce qu'ils sont appelés en PHP. le résultat serait:

x = {key: value}

Je sais que c'est une question super simple mais j'ai du mal à trouver les bonnes questions à poser à Google. Si je pose la mauvaise question, veuillez m'éclairer que je me gratte la tête depuis trop longtemps sur quelque chose que je pourrais faire si facilement dans une autre langue. J'apprécie vraiment l'aide.


3 commentaires

Qu'avez-vous essayé? Aucun des exemples n'est une syntaxe PHP valide. Si vous voulez en savoir plus sur les objets PHP, vous trouverez des informations dans la documentation ici < / a> et ici .


Les données proviennent-elles de la base de données sous la forme que vous montrez dans votre question? C'est une chaîne JSON, pas une structure de données PHP valide.


PHP a à la fois des objets et des tableaux associatifs. Les objets sont des instances de classes tandis que les tableaux associatifs ne sont que des données. Vous pouvez convertir un tableau en un objet générique qui deviendra une instance de la stdClass intégrée. Dans votre cas, il semble que vous vouliez créer une classe person et vos objets en seraient des instances.


3 Réponses :


2
votes

Cela ajoutera le nouvel objet à la fin du tableau d'objets

$object->newPropery = 'value';

Si vous souhaitez ajouter une nouvelle propriété à l'objet, vous pouvez simplement le faire:

$objectArray[] = $newObject;


0 commentaires

0
votes

Vous avez deux options ici. Le premier est juste un tableau . Les tableaux en PHP sont associatifs, ils peuvent donc utiliser des chaînes comme clés, pas seulement des nombres. Vous feriez quelque chose comme ceci:

class Person
{
    public $name;
    public $age;
    public $height;
}

Pour ajouter quelque chose à un tableau comme celui-ci, vous pouvez simplement définir une nouvelle clé: $ people [0] ['height'] = 2; . Vous pouvez également utiliser une boucle for (ou un foreach avec des références) pour ajouter ceci à chaque personne en fonction d'une formule si vous le souhaitez.

Ceci est quelque peu de mauvais goût, cependant, car les tableaux font des structures de données terribles: il n'y a pas d'informations prédéfinies sur les données qui peuvent y être, ce qui peut être fait avec ces données, etc. Au lieu de cela, vous voudrez généralement déclarer une classe, au moins comme ceci:

$people = [
 [
  'name' => 'Jane Smith',
  'age' => 20,
 ],
 [
  'name' => 'Mary Sue',
  'age' => 30
 ]
]

Ensuite, vous pouvez créer un $ person = new Person (); et définissez les valeurs en utilisant la syntaxe de la flèche: $ person-> name = 'Jane Smith'; . Idéalement, vous voudriez également qu'un constructeur accepte les valeurs initiales et les setters / getters pour permettre de valider les données passées dans l'objet plutôt que d'accepter aveuglément les valeurs données, mais cela peut venir plus tard.

Ce sont vos deux choix. En règle générale, choisissez des tableaux pour des structures de données temporaires rapides et sales et choisissez des objets pour des données plus complexes et persistantes. Comme je ne vois pas ce que vous essayez de faire avec ces données, je ne peux pas dire strictement si un tableau ou un objet convient le mieux ici.


0 commentaires

0
votes

C'est assez ancien mais il y a une autre option qui n'a pas été mentionnée.

vous pouvez réaliser la manière que vous avez examinée en python

afin de créer cet objet suivant: (Python)

object(stdClass)#4 (2) {
  ["name"]=>
  string(4) "john"
  ["age"]=>
  int(22)
}

nous allons faire: (PHP)

$obj->age = 22;
var_dump($obj);

parce qu'en python et javascript et dans d'autres langages je suppose qu'ils sont en utilisant le format json pour les objets. php a une fonction intégrée qui convertit la chaîne json en objet donc nous avons juste besoin de convertir le format connu en chaîne et de dire à php de l'analyser et nous finirons avec le même résultat.

maintenant si nous voulons ajouter quelque chose à l'objet, cela peut être fait par que:

$obj = '{
  "name": "john"
}';
$obj = json_decode($obj);
echo $obj->name;

sortie:

obj = {
 "name": "john";
}

print(obj.name);


0 commentaires