개체를 어레이로 변환하려면 어떻게 해야 합니까?
<?php
print_r($response->response->docs);
?>
다음을 출력합니다.
Array
(
[0] => Object
(
[_fields:private] => Array
(
[id]=>9093
[name]=>zahir
)
Object
(
[_fields:private] => Array
(
[id]=>9094
[name]=>hussain
)..
)
)
이 개체를 배열로 변환하려면 어떻게 해야 합니까?다음을 출력하고 싶습니다.
Array
(
[0]=>
(
[id]=>9093
[name]=>zahir
)
[1]=>
(
[id]=>9094
[name]=>hussain
)...
)
이게 가능합니까?
단차원 어레이
배열을 할 때는 1차원 배열을 사용하여 할 수 .(array)
아니면 브누아 씨가 답변에서 언급했던 것이 있습니다.
// Cast to an array
$array = (array) $object;
// get_object_vars
$array = get_object_vars($object);
그들은 서로 조금씩 다르게 일한다.를 들어, 「」라고 하는 것은,get_object_vars
전달 중인 개체의 범위 내에서 호출되지 않는 한(개체의 멤버 함수에서) 공개적으로 액세스할 수 있는 속성만 있는 배열을 반환합니다. (array)
한편, 님은 어레이에 퍼블릭, 프라이빗 및 보호 멤버를 모두 포함시켜 어레이에 캐스트합니다(물론 현재는 퍼블릭, 프라이빗, 보호 멤버 모두 포함).
다차원 어레이
다소 지저분한 방법은 PHP >= 5.2의 네이티브 JSON 함수를 사용하여 JSON으로 인코딩한 다음 다시 배열로 디코딩하는 것입니다.단, 개인 멤버 및 보호된 멤버는 포함되지 않으며 JSON 인코딩할 수 없는 데이터(바이너리 데이터 등)를 포함하는 개체에는 적합하지 않습니다.
// The second parameter of json_decode forces parsing into an associative array
$array = json_decode(json_encode($object), true);
또는 다음 함수는 객체에서 프라이빗 멤버와 보호 멤버를 포함한 어레이로 변환되며 여기서 가져와 캐스팅을 사용하도록 수정됩니다.
function objectToArray ($object) {
if(!is_object($object) && !is_array($object))
return $object;
return array_map('objectToArray', (array) $object);
}
get_object_vars에서 속성을 private로 선언할 때 클래스 내에서 호출하여 결과를 반환해야 합니다.
문자열과 같은 원시 데이터 유형은 매우 유용하지만 중첩된 개체에서는 어떻게 작동하는지 알 수 없습니다.
당신의 경우, 당신은 다음과 같은 것을 해야 합니다.
<?php
print_r(get_object_vars($response->response->docs));
?>
JSON 부호화/복호화 함수의 동작에 의존함으로써 깊이 중첩된 개체를 연관 배열로 빠르게 변환할 수 있습니다.
$array = json_decode(json_encode($response->response->docs), true);
주의:
$array = (array) $object;
얕은 변환($object->innerObject=new stdClass()은 객체로 남습니다) 및 json을 사용하여 앞뒤로 변환하는 것은 기능하지만 성능이 문제가 된다면 좋은 생각이 아닙니다.
모든 개체를 연관 배열로 변환해야 하는 경우 다음 방법이 더 좋습니다(어디서 코드를 복사했는지 기억나지 않습니다).
function toArray($obj)
{
if (is_object($obj)) $obj = (array)$obj;
if (is_array($obj)) {
$new = array();
foreach ($obj as $key => $val) {
$new[$key] = toArray($val);
}
} else {
$new = $obj;
}
return $new;
}
$array = json_decode(json_encode($object), true);
해서 가지 요.foreach
이 방법은 지금까지 본 것 중 가장 쉽고 멋진 방법입니다. 줄만 한: :)
단순 버전:
$arrayObject = new ArrayObject($object);
$array = $arrayObject->getArrayCopy();
재귀 버전 업데이트:
class RecursiveArrayObject extends ArrayObject
{
function getArrayCopy()
{
$resultArray = parent::getArrayCopy();
foreach($resultArray as $key => $val) {
if (!is_object($val)) {
continue;
}
$o = new RecursiveArrayObject($val);
$resultArray[$key] = $o->getArrayCopy();
}
return $resultArray;
}
}
$arrayObject = new RecursiveArrayObject($object);
$array = $arrayObject->getArrayCopy();
이것을 시험해 보세요:-
<?php
print_r(json_decode(json_encode($response->response->docs),true));
?>
저도 같은 문제가 있어서 위의 get_object_vars로 해결했습니다.
게다가 오브젝트를 json_decode로 변환하고, 구식의 「for」루프(각각의 「for」루프를 사용해 어레이를 반복할 필요가 있었습니다.
이 함수를 어플리케이션 내의 다른 클래스인 "HelperFunctions"에 포함시켜 objectToArray()에 대한 재귀 호출이 실패했기 때문에 Andy Earnshow의 답변에 문제가 발생했습니다.
array_map 호출 내에서 클래스 이름을 다음과 같이 지정함으로써 이 문제를 해결했습니다.
public function objectToArray($object) {
if (!is_object($object) && !is_array($object))
return $object;
return array_map(array("HelperFunctions", "objectToArray"), (array) $object);
}
댓글로 썼을 텐데 아직 평판이 안 좋아요.
php의 array_values() 메서드를 사용할 수도 있습니다.
//My Function is worked. Hope help full for you :)
$input = [
'1' => (object) [1,2,3],
'2' => (object) [4,5,6,
(object) [6,7,8,
[9, 10, 11,
(object) [12, 13, 14]]]
],
'3' =>[15, 16, (object)[17, 18]]
];
echo "<pre>";
var_dump($input);
var_dump(toAnArray($input));
public function toAnArray(&$input) {
if (is_object($input)) {
$input = get_object_vars($input);
}
foreach ($input as &$item) {
if (is_object($item) || is_array($item)) {
if (is_object($item)) {
$item = get_object_vars($item);
}
self::toAnArray($item);
}
}
}
언급URL : https://stackoverflow.com/questions/2476876/how-do-i-convert-an-object-to-an-array
'itsource' 카테고리의 다른 글
변수를 인수로 정의되지 않음 또는 전달되지 않음으로 설정할 수 있습니까? (0) | 2022.09.18 |
---|---|
yum을 통해 MariaDB 5.5에서 MariaDB 10으로 업그레이드 실패 (0) | 2022.09.18 |
Swisscom MariaDb Ent의 기본 테이블 스토리지 형식은 무엇입니까? (0) | 2022.09.18 |
SQL: 인접 노드를 유향 그래프로 쿼리합니다. (0) | 2022.09.18 |
HashMap Java 8 구현 (0) | 2022.09.18 |