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']を簡単に実行できるようにしたいと思います

編集:そのように動作します(thx Dani):私はPhpに完全に慣れていないので、誰かが説明できれば(JSON_FORCE_OBJECT optsはそれを解決しませんでした)

$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

JSONに変換する場合、連想配列(少なくとも1つの文字列キーを持つ配列)は常にJSONオブジェクトに変換されます。

空の配列または文字列キー(数値キー)のない配列を変換する場合、配列は常にJSON配列[]に変換されます。

空の配列または数値配列がオブジェクトに変換されすぎていることを確認するには、パラメーターとして渡すときに(object)を使用してそれらをキャストします。

ただし、ネストされた配列がある場合は、次のようにjson_encodeにフラグを渡す方がはるかに簡単ですjson_encode($arrNestedArraysAndObjects, JSON_FORCE_OBJECT);(> PHP 5.3が必要ですが、これは何年も前から存在しています)。

于 2012-06-01T23:08:17.063 に答える
0

これはあなたの質問に答えませんが、あなたが達成しようとしていることは、RubyのハッシュまたはJavaScriptのオブジェクトと比較できる単純なPHP(連想)配列で行うことができます。

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

または、PHP 5.4構文の場合:

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

また、他の人が言ったように、{{"tob":"durant"},{"caty":"johns"}}キーがないため、有効なオブジェクトではありません。

于 2012-06-01T22:45:15.937 に答える
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

変数変数を使用できます。

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