簡體   English   中英

如何在 PHP 中向對象添加新的鍵值對?

[英]How do I add a new key value pair to an object in PHP?

我想我的問題有兩個方面

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

我知道這是一個非常簡單的問題,但我正在努力尋找合適的問題來問谷歌。 如果我問錯了問題,請賜教我我一直在撓頭太久了,我可以用另一種語言輕松做到這一點。 我真的很感謝你的幫助。

這將在對象數組的末尾追加新對象

$objectArray[] = $newObject;

如果要向對象添加新屬性,只需執行以下操作:

$object->newPropery = 'value';

您在這里有兩個選擇。 第一個只是一個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'; . 理想情況下,您還希望構造函數接受初始值和 setter/getter,以便驗證傳遞到對象中的數據,而不是盲目地接受給出的任何值,但這可能會在以后出現。

這是你的兩個選擇。 通常,為快速和臟的臨時數據結構選擇數組,為更復雜和持久的數據選擇對象。 由於我看不到您想用這些數據做什么,我不能嚴格地說是數組還是對象最適合這里。

它已經很舊了,但還有一個沒有提到的選項。

你可以實現你在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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM