0

我正在努力构建一个对象的对象,而不是一个对象数组(这有效,但稍后与 json 一起使用不太容易)

使用http://writecodeonline.com/php/进行测试

$a = Array();
$obj = new stdClass();
$obj->key = "name";
$obj->value = "durant";
array_push($a, $obj);

$obj = new stdClass();
$obj->key = "friend";
$obj->value = "johns";
array_push($a, $obj);

$preds = Array();
foreach( $a as $v ){
$item = Array(); // new stdClass(); 
$item[$v->key] = $v->value; // ^  doesn't work
array_push($preds, $item);
}
$obj = new stdClass();
$obj->key = "data";
$obj->value = $preds;
array_push($a, $obj);

//var_dump($a);

echo(json_encode($a[2]->value));  // returns: [{"name":"durant"},{"friend":"johns"}]

我希望能够轻松地执行 $arr['name'] 或 $arr['friend']

编辑:像那样工作(谢谢 Dani):我对 Php 完全不熟悉,所以如果有人可以解释(JSON_FORCE_OBJECT 选项没有解决它)

$a = Array();
$obj = new stdClass();
$obj->key = "name";
$obj->value = "durant";
array_push($a, $obj);

$obj = new stdClass();
$obj->key = "friend";
$obj->value = "johns";
array_push($a, $obj);

$preds = new stdClass();
foreach( $a as $v ){
$k = $v->key;
$preds->$k = $v->value;
}
$obj = new stdClass();
$obj->key = "data";
$obj->value = $preds;
array_push($a, $obj);

echo(json_encode($a[2]->value)); // returns: {"name":"durant", "friend":"johns"}
4

4 回答 4

0

您可以将关联数组强制转换为对象,因此如果您想要快速轻松地初始化对象,您可以使用数组语法然后进行强制转换:

$var = (object) array(
    'dit'=>'dat',
    'foo'=>'bar',
);

{{"tob":"durant"},{"caty":"johns"}}是无效的 JavaScript,所以我有点猜测你想要 {0:{"tob":"durant"},1:{"caty":"johns"}}什么。如果你将普通数组转换为对象,你会得到什么。)

于 2012-06-01T22:53:01.117 回答
0

转换为 JSON 时,关联数组(具有至少 1 个字符串键的数组)将始终转换为 JSON 对象。

当转换空数组或没有字符串键(数字键)的数组时,数组将始终转换为 JSON 数组 []。

为了确保空数组或数值数组也被转换为对象,在将它们作为参数传递时使用 (object) 进行转换。

但是,如果您有嵌套数组,则像这样将标志传递给 json_encode 会容易得多:(json_encode($arrNestedArraysAndObjects, JSON_FORCE_OBJECT);您需要 > PHP 5.3,它已经存在多年了)。

于 2012-06-01T23:08:17.063 回答
0

这不能回答您的问题,但是您尝试完成的工作可以使用简单的 PHP(关联)数组来完成,您可以将其与 Ruby 的哈希或 JavaScript 的对象进行比较:

$myArray = array('foo' => 'bar');

或者,在 PHP 5.4 语法中:

$myArray = ['foo' => 'bar']

此外,正如其他人所说,{{"tob":"durant"},{"caty":"johns"}}它不是一个有效的对象,因为它没有键。

于 2012-06-01T22:45:15.937 回答
0

您可以使用可变变量:

$name = 'bar';
$foo->$name = 123; 
// same as:
$foo->bar = 123;
于 2012-06-01T23:19:02.027 回答