次の配列を作成しました。
$clasa = array(
'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
私はこの配列をstdClass()を使用してオブジェクトに変換する方法を知りたいです、私はPHP初心者です、簡単な例は非常に役立つでしょう、私は同様の質問を探してみましたが、答えは複雑で、基本的なクラスとオブジェクトの理解を超えています。
このコードを追加するだけです
$clasa = (object) array(
'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
このstdClassオブジェクトが見たい場合は、これを呼び出してください
print_r($clasa);
配列をオブジェクトコードに変換する場合は、
$arr = array('a'=>'Apple','b'=>'ball');
$arr = (object) $arr;
StdClassを使用する必要はありません。自動的にstdClassに変換されます
迅速で汚い方法は、 json_encode
と json_decode
を使用することで、配列全体(サブ要素を含む)をオブジェクトに変換します。
$clasa = json_decode(json_encode($clasa)); //Turn it into an object
同じことがオブジェクトを配列に変換するために使用できます。単に, true
をjson_decode
に追加して、関連する配列を返します。
$clasa = json_decode(json_encode($clasa), true); //Turn it into an array
別の方法(ダーティにならない)は、単に再帰関数です。
function convertToObject($array) {
$object = new stdClass();
foreach ($array as $key => $value) {
if (is_array($value)) {
$value = convertToObject($value);
}
$object->$key = $value;
}
return $object;
}
または完全なコードで:
<?php
function convertToObject($array) {
$object = new stdClass();
foreach ($array as $key => $value) {
if (is_array($value)) {
$value = convertToObject($value);
}
$object->$key = $value;
}
return $object;
}
$clasa = array(
'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
$obj = convertToObject($clasa);
print_r($obj);
?>
出力(配列がないことに注意してください-stdClass
のみ):
stdClass Object
(
[e1] => stdClass Object
(
[nume] => Nitu
[prenume] => Andrei
[sex] => m
[varsta] => 23
)
[e2] => stdClass Object
(
[nume] => Nae
[prenume] => Ionel
[sex] => m
[varsta] => 27
)
[e3] => stdClass Object
(
[nume] => Noman
[prenume] => Alice
[sex] => f
[varsta] => 22
)
[e4] => stdClass Object
(
[nume] => Geangos
[prenume] => Bogdan
[sex] => m
[varsta] => 23
)
[e5] => stdClass Object
(
[nume] => Vasile
[prenume] => Mihai
[sex] => m
[varsta] => 25
)
)
したがって、$obj->e5->nume
で参照することになります。
配列全体をオブジェクト型(stdClass)に再帰的に変換する場合は、以下が最適な方法であり、特に、書き込み(独自の機能。
$array_object = json_decode(json_encode($array));
最も簡単な解決策の1つは
$objectData = (object) $arrayData
StdClassを使用して配列をオブジェクトに変換するには、(object)
を配列u宣言に追加するだけです。
例:
echo $array['value'];
echo $object->value;
オブジェクトを配列に変換する
$obj = (object)$array;
配列をオブジェクトに変換する
$arr = (array)$object
これらのメソッドを使用すると、配列とオブジェクトを簡単に交換できます。
別の方法は、jsonを使用することです
$object = json_decode(json_encode($array), FALSE);
しかし、これはメモリを集中的に使用する方法であり、PHP <= 5.1のバージョンではサポートされていません
stdClassへの配列は、この方法でphpで実行できます。 (stdClassはすでにPHPの一般的な空のクラスです)
$a = stdClass:: __set_state(array());
実際にPHP 5でstdClass :: __ set_state()を呼び出すと、致命的なエラーが発生します。指摘してくれてありがとう@Ozzy
これは、PHP5でstdClassオブジェクトで__set_state()を使用する方法の例です
class stdClassHelper{
public static function __set_state(array $array){
$stdClass = new stdClass();
foreach ($array as $key => $value){
$stdClass->$key = $value;
}
return $stdClass;
}
}
$newstd = stdClassHelper::__set_state(array());
またはより良い方法。
$a = (object) array();
または、あなたはこのことを使うことができます
$arr = [1,2,3];
$obj = json_decode(json_encode($arr));
print_r($obj);
これを使用してください チュートリアル
<?php
function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
function arrayToObject($d) {
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return (object) array_map(__FUNCTION__, $d);
}
else {
// Return object
return $d;
}
}
// Create new stdClass Object
$init = new stdClass;
// Add some test data
$init->foo = "Test data";
$init->bar = new stdClass;
$init->bar->baaz = "Testing";
$init->bar->fooz = new stdClass;
$init->bar->fooz->baz = "Testing again";
$init->foox = "Just test";
// Convert array to object and then object back to array
$array = objectToArray($init);
$object = arrayToObject($array);
// Print objects and array
print_r($init);
echo "\n";
print_r($array);
echo "\n";
print_r($object);
//OUTPUT
stdClass Object
(
[foo] => Test data
[bar] => stdClass Object
(
[baaz] => Testing
[fooz] => stdClass Object
(
[baz] => Testing again
)
)
[foox] => Just test
)
Array
(
[foo] => Test data
[bar] => Array
(
[baaz] => Testing
[fooz] => Array
(
[baz] => Testing again
)
)
[foox] => Just test
)
stdClass Object
(
[foo] => Test data
[bar] => stdClass Object
(
[baaz] => Testing
[fooz] => stdClass Object
(
[baz] => Testing again
)
)
[foox] => Just test
)