<?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
)...
)
이게 가능해?
답변
get_object_vars를 살펴 보십시오. 속성이 비공개로 선언 되었으므로 클래스 내에서 이것을 호출하고 결과를 반환해야합니다.
문자열과 같은 기본 데이터 유형의 경우 훌륭하게 작동하지만 중첩 된 객체에서 어떻게 작동하는지 모르겠습니다.
귀하의 경우에는 다음과 같은 일을해야합니다.
<?php
print_r(get_object_vars($response->response->docs));
?>
답변
1 차원 배열
단일 차원 배열을 변환의 경우, 사용 캐스트 할 수 있습니다 (array)
또는 거기에 get_object_vars
벤와가 언급하는
그의 대답 .
// 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);
}
답변
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));
?>