我正在努力构建一个对象对象,而不是一个对象数组(这样可以工作,但以后用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"}
答案 0 :(得分:0)
这并没有回答你的问题,但你想要完成的事情可以通过简单的PHP(关联)数组完成,你可以将它与Ruby的哈希或JavaScript进行比较。对象:
$myArray = array('foo' => 'bar');
或者,在PHP 5.4语法中:
$myArray = ['foo' => 'bar']
此外,正如其他人所说,{{"tob":"durant"},{"caty":"johns"}}
不是一个有效的对象,因为它没有密钥。
答案 1 :(得分:0)
您可以将关联数组转换为对象,因此如果您想要快速简单的对象初始化,您可以使用数组语法然后转换它:
$var = (object) array(
'dit'=>'dat',
'foo'=>'bar',
);
({{"tob":"durant"},{"caty":"johns"}}
是无效的JavaScript,所以我猜你想要什么。{0:{"tob":"durant"},1:{"caty":"johns"}}
是你将普通数组转换为对象时会得到的。)
答案 2 :(得分:0)
转换为JSON时,关联数组(至少包含1个字符串键的数组)将始终转换为JSON对象。
当转换空或数组而没有字符串键(数字键)时,数组将始终转换为JSON数组[]。
为了确保空数组或数值数组太过转换为对象,在将它们作为参数传递时将它们与(对象)一起转换。
如果你有嵌套数组,那么将标志传递给json_encode要容易得多: json_encode($arrNestedArraysAndObjects, JSON_FORCE_OBJECT);
(你需要> PHP 5.3,已经多年了)
答案 3 :(得分:0)
您可以使用变量:
$name = 'bar';
$foo->$name = 123;
// same as:
$foo->bar = 123;