了解 stdClass 对象
Understanding stdClass objects
好的,我 "kind of" 是 PHP 中 stdClass 对象的新手,我正在尝试一些以了解导出数据/创建 API 以从数据库中获取信息和相关信息。
所以,我想要的是让用户访问某些信息,比如说数据库或 XML-文件(不是全部,只是某些部分)。 (在这种情况下,它是一个本地 sqlite3 文件)我想以 JSON-格式向用户提供数据。
我需要什么帮助?简而言之 - 我想从你那里得到一些建议,以比我已经得到的更聪明的方式解决 "problem"。 (我想我的方法有点……丑陋的解决方案。
这是我导出的结构的当前导出(没有JSON-encode):http://codepaste.net/965tgj
我在 php 文件中通过以下方式完成了此操作:($users 实际上是来自 sqlite3.db 的数据,我确实完全了解如何使用,所以我瘦了代码下来:)
$users = array(
array(
"id" => 1,
"user" => "Xavizus"
),
array(
"id" => 2,
"user" => "Zariel"
)
);
$obj = new stdClass();
$obj->auth = true;
$obj->usercount = 2;
$obj->users = array();
for($i =0; $i < $obj->usercount; $i++){
$obj->users[] = new stdClass();
}
for($i = 0; $i < $obj->usercount; $i++) {
$obj->users[$i]->id = $users[$i]['id'];
$obj->users[$i]->user = $users[$i]['user'];
}
print_r($obj);
有没有更简洁的方法来做到这一点?或者这是我能做到的最干净的吗?
你可以在一个 for 循环中完成吗?
而不是
for($i =0; $i < $obj->usercount; $i++){
$obj->users[] = new stdClass();
}
for($i = 0; $i < $obj->usercount; $i++) {
$obj->users[$i]->id = $users[$i]['id'];
$obj->users[$i]->user = $users[$i]['user'];
}
你可以这样做
for($i =0; $i < $obj->usercount; $i++){
$newObject = new stdClass();
$newObject->id = $users[$i]['id'];
$newObject->user = $users[$i]['user'];
$obj->users[] = $newObject;
}
使用 (object)
转换数组会更容易:
$obj = new stdClass();
$obj->auth = true;
$obj->usercount = count($users);
$obj->users = $users;
foreach($obj->users as &$user) {
$user = (object)$user;
}
但是我会查看@jeroen 的评论:“您应该定义自己的 class 并让构造函数接受初始化值。那样会更清晰。 “
class users {
function __construct($users, $auth=true) {
$this->auth = $auth;
$this->usercount = count($users);
foreach($users as $user) {
$this->users[] = (object)$user;
}
}
}
$obj = new users($users);
您还可以在从 fetchArray()
分配行数组时将其转换为对象。
好的,我 "kind of" 是 PHP 中 stdClass 对象的新手,我正在尝试一些以了解导出数据/创建 API 以从数据库中获取信息和相关信息。
所以,我想要的是让用户访问某些信息,比如说数据库或 XML-文件(不是全部,只是某些部分)。 (在这种情况下,它是一个本地 sqlite3 文件)我想以 JSON-格式向用户提供数据。
我需要什么帮助?简而言之 - 我想从你那里得到一些建议,以比我已经得到的更聪明的方式解决 "problem"。 (我想我的方法有点……丑陋的解决方案。
这是我导出的结构的当前导出(没有JSON-encode):http://codepaste.net/965tgj
我在 php 文件中通过以下方式完成了此操作:($users 实际上是来自 sqlite3.db 的数据,我确实完全了解如何使用,所以我瘦了代码下来:)
$users = array(
array(
"id" => 1,
"user" => "Xavizus"
),
array(
"id" => 2,
"user" => "Zariel"
)
);
$obj = new stdClass();
$obj->auth = true;
$obj->usercount = 2;
$obj->users = array();
for($i =0; $i < $obj->usercount; $i++){
$obj->users[] = new stdClass();
}
for($i = 0; $i < $obj->usercount; $i++) {
$obj->users[$i]->id = $users[$i]['id'];
$obj->users[$i]->user = $users[$i]['user'];
}
print_r($obj);
有没有更简洁的方法来做到这一点?或者这是我能做到的最干净的吗?
你可以在一个 for 循环中完成吗?
而不是
for($i =0; $i < $obj->usercount; $i++){
$obj->users[] = new stdClass();
}
for($i = 0; $i < $obj->usercount; $i++) {
$obj->users[$i]->id = $users[$i]['id'];
$obj->users[$i]->user = $users[$i]['user'];
}
你可以这样做
for($i =0; $i < $obj->usercount; $i++){
$newObject = new stdClass();
$newObject->id = $users[$i]['id'];
$newObject->user = $users[$i]['user'];
$obj->users[] = $newObject;
}
使用 (object)
转换数组会更容易:
$obj = new stdClass();
$obj->auth = true;
$obj->usercount = count($users);
$obj->users = $users;
foreach($obj->users as &$user) {
$user = (object)$user;
}
但是我会查看@jeroen 的评论:“您应该定义自己的 class 并让构造函数接受初始化值。那样会更清晰。 “
class users {
function __construct($users, $auth=true) {
$this->auth = $auth;
$this->usercount = count($users);
foreach($users as $user) {
$this->users[] = (object)$user;
}
}
}
$obj = new users($users);
您还可以在从 fetchArray()
分配行数组时将其转换为对象。