stdClass () [duplicate]를 사용하여 배열을 객체로 변환하는 방법
이 질문에 이미 답변이 있습니다.
다음 배열을 만들었습니다.
$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));
가장 쉬운 해결 중 하나는
$objectData = (object) $arrayData
stdClass를 사용하여 배열을 배열로 변환 배열을 (object)
배열에 추가하십시오 .
전의 :
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
)
참고 URL : https://stackoverflow.com/questions/19272011/how-to-convert-an-array-into-an-object-using-stdclass
'IT' 카테고리의 다른 글
'System.DBNull'유형의 개체를 'System.String'유형으로 캐스팅 할 수 없습니다. (0) | 2020.08.24 |
---|---|
컴파일러 오류 : memset (0) | 2020.08.24 |
활동이 전경 또는 보이는 배경에 있는지 확인하는 방법은 무엇입니까? (0) | 2020.08.24 |
C ++ 매크로를 사용하는 선행 변수 (0) | 2020.08.24 |
Android 휴대 전화 애플리케이션을 세로 모드로 잠금 (0) | 2020.08.24 |