如何在PHP中向对象添加新的键值对?

时间:2019-08-16 13:29:48

标签: php arrays sqlite object

我想我的问题有两个方面

在Python中,如果我这样做

x = {key: value}

我已经创建了字典

在javaScript中,如果我做的也是创建对象的相同事情

PHP中是什么?可能只是我不知道这些术语

我正在与laravel合作一个项目。我基本上有一个我正在访问的sqlite数据库。这将返回一个“对象”数组(使用javaScript术语)。我想遍历数组中的“对象”进行一次foreach循环,并向“对象”添加新的键和值。

第二个-抱歉,我不是100%确定php中的语法:

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

再次对语法感到非常抱歉,我是直接从sqlite数据库接收数组,因此在此阶段它并不太重要。

我的问题是-如果我想给每个人增加一个身高,我该怎么做?让我重新表述一下,我知道要使用foreach遍历整个数组,我只需要一个命令即可让我在字典/对象/在PHP中称为它们的末尾附加一个新的键/值对。结果将是:

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

我知道这是一个非常简单的问题,但是我正在努力寻找合适的问题来问Google。如果我问错了一个问题,请告诉我,我已经花了很长时间摸索我可以用另一种语言轻松做到的事情。我非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这会将新对象添加到对象数组的末尾

$objectArray[] = $newObject;

如果要向对象添加新属性,只需执行以下操作:

$object->newPropery = 'value';

答案 1 :(得分:0)

您在这里有两个选择。第一个只是array。 PHP中的数组是关联的,因此它们可以将字符串用作键,而不仅仅是数字。您将执行以下操作:

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

要向这样的数组中添加内容,您只需定义一个新键:$people[0]['height'] = 2;。如果需要,您还可以使用for循环(或带有参考的foreach)将其添加到每个人基于某个公式的方式。

但是,这有点不好吃,因为数组使数据结构变得糟糕:没有预定义的信息可以知道其中可以包含什么数据,可以用该数据做什么等等。取而代之的是,您通常至少要声明一个类:

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

然后,您可以创建一个$person = new Person();并使用箭头语法$person->name = 'Jane Smith';设置值。理想情况下,您还希望构造函数接受初始值和setters / getters,以使可以验证传递到对象中的数据,而不是盲目接受所提供的任何值,但这可以稍后进行。

这是您的两个选择。通常,为快速而肮脏的临时数据结构选择数组,为更复杂和持久的数据选择对象。因为我看不到您要使用这些数据做什么,所以我不能严格地说一个数组或一个对象最适合这里。

答案 2 :(得分:0)

它已经很旧了,但还有一个没有提到的选项。

你可以实现你在python中检查过的方式

所以为了创建以下对象:(Python)

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

print(obj.name);

我们将要做的:(PHP)

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

因为在 python 和 javascript 以及其他语言中,我猜他们使用 json 格式的对象。 php 有一个内置函数,可以将 json 字符串转换为对象 所以我们只需要将已知格式转换为字符串并告诉 php 解析它,我们就会得到相同的结果。

现在如果我们想给对象添加一些东西,可以这样做:

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

输出:

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