2016-05-11 7 views
1

私は、同様の質問に対する多くの回答を見ましたが、限られたPHPチョップで解析することはできません。単に、オブジェクトのクイックリストを作成し、その配列をループして各オブジェクトのプロパティにアクセスしたいと思います。 JavaScriptでそれは非常に簡単です:PHPはオブジェクトの配列内のプロパティを作成してアクセスします

var arrayOfObjects = [ 
{'color': 'red', 'size': 10}, 
{'color': 'blue', 'size': 4}, 
{'color': 'green', 'size': 6} 
]; 
for(var i=0; i<arrayOfObjects.length; i++) { 
console.log(arrayOfObjects[i]['color']); 
console.log(arrayOfObjects[i]['size']); 
} 

私はPHP 5.3を使用していて、ここで私の最初の醜い刺しだ:

$array_of_objects = array(); 
$object = new stdClass(); 
$object->color = 'red'; 
$object->size = 10; 
array_push($array_of_objects, $object); 
$object2 = new stdClass(); 
$object2->color = 'green'; 
$object2->size = 4; 
array_push($array_of_objects, $object2); 

これはひどい見えます。

+0

...現代版のPHPでは、JavaScriptに非常によく似た何かを書くことができます。私はオブジェクトを作成していますが、それは特定の構造と目的を持つ必要があるため、通常は匿名オブジェクトを使用することはめったにありません。 – CD001

+0

あなたはこのようにダーティトリックを使うことができると思います: '$ object = array( 'color' => 'red'、 'size' => 'none')、(object)array( 'color' => 'blue'、 'size' => 100)); '。ちょうど(php-doc-commentsの中で)読まれました(http://php.net/manual/ru/language.oop5.php#84292)。 – Wizard

答えて

1
<?php 
$arrayOfObjects = array(
    (object)array('color' => 'red', 'size' => 10), 
    (object)array('color' => 'blue', 'size' => 4), 
    (object)array('color' => 'green', 'size' => 6), 
); 


foreach($arrayOfObjects as $obj) { 
    echo $obj->color; 
    echo $obj->size; 
} 

PHPの配列は、同様に、文字列のインデックスを持つことができます。これはあなたのニーズに適していますか?

<?php 
$arrayOfObjects = array(
    array('color' => 'red', 'size' => 10), 
    array('color' => 'blue', 'size' => 4), 
    array('color' => 'green', 'size' => 6), 
); 


foreach($arrayOfObjects as $obj) { 
    echo $obj['color']; 
    echo $obj['size']; 
} 
+0

配列をオブジェクトにキャストするときは、(良い方法で)「レイジー」することもできます。 'color' => 'red'、 'size' => 10] ' – CD001

+1

@ CD001これはOPが使用しているPHP 5.3では動作しません。しかし、PHP 5.4以上の人にとってはまったく関係があります。 –

+0

ああ、公正な点は、PHPのバージョンを逃した:) – CD001

0

$ colorと$ Sizeという2つのプロパティを持つクラスを作成することはどうですか? オブジェクトをインスタンス化して配列にプッシュします。 これを試してみてください:

<?php 

$Array = array(); 
$YourObject = new YourClass(); 
$YourObject->color = "red"; 
$YourObject->size = "10"; 

array_push($Array, $YourObject); 


$YourObject = new YourClass(); 
$YourObject->color = "blue"; 
$YourObject->size = "4"; 

array_push($Array, $YourObject); 


$YourObject = new YourClass(); 
$YourObject->color = "green"; 
$YourObject->size = "6"; 

array_push($Array, $YourObject); 

print "<pre>"; 
print_r($Array); 
print "</pre>"; 


class YourClass { 
    public $color; 
    public $size; 
} 
?> 
0

配列をループにforeachループを使用して、メンバオブジェクトのプロパティのディスプレイ。

はここに参照です:

だからあなたのコードは次のようにする必要があります:

$array_of_objects = array(); 
$object = new stdClass(); 
$object->color = 'red'; 
$object->size = 10; 
array_push($array_of_objects, $object); 
$object2 = new stdClass(); 
$object2->color = 'green'; 
$object2->size = 4; 
array_push($array_of_objects, $object2); 

foreach($array_of_objects as $object){ 
    echo "Color: " . $object->color . ", Size: " . $object->size . "<br />"; 
} 

出力:

Color: red, Size: 10 
Color: green, Size: 4 

追記:あなたは完全な配列構造を見るためにvar_dump($array_of_objects);を行うことができます。

1

JSONはJavaScriptの宣言とほぼ同じです。 "

$array_of_objects = json_decode('[ 
{"color": "red", "size": 10}, 
{"color": "blue", "size": 4}, 
{"color": "green", "size": 6} 
]'); 

foreach($array_of_objects as $obj) { 
    echo $obj->color; 
    echo $obj->size; 
} 
+0

私はこの解決策も好きですが、私は現時点でネイティブPHPに固執しようとしています。 – icicleking

+0

OK、特にオブジェクトを必要としないので、はるかに簡単です。 – AbraCadaver

関連する問題