객체를 배열로 변환하려면 어떻게해야합니까?
PHP객체를 배열로 변환하려면 어떻게해야합니까?
<?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.당신은 get_object_vars를보아야한다. 당신의 프로퍼티가 private로 선언 되었기 때문에 이것을 클래스 내부에서 호출하고 그 결과를 리턴해야한다.
당신은 get_object_vars를보아야한다. 당신의 프로퍼티가 private로 선언 되었기 때문에 이것을 클래스 내부에서 호출하고 그 결과를 리턴해야한다.
조심해라. 문자열과 같은 원시 데이터 타입은 훌륭하게 작동하지만 중첩 된 객체가 어떻게 동작하는지 조심해야한다.
당신의 경우에 당신은 뭔가를해야만합니다.
<?php print_r(get_object_vars($response->response->docs)); ?>
-
==============================
2.단일 차원 배열을 변환하려면 (array)를 사용하여 캐스트하거나 get_object_vars가 있어야합니다. 그의 대답.
단일 차원 배열을 변환하려면 (array)를 사용하여 캐스트하거나 get_object_vars가 있어야합니다. 그의 대답.
// Cast to an array $array = (array) $object;
// get_object_vars $array = get_object_vars($object);
그들은 서로 약간 다르게 작동합니다. 예를 들어, get_object_vars는 전달중인 객체의 범위 (즉, 객체의 멤버 함수)에서 호출되지 않는 한 공개적으로 액세스 가능한 속성 만있는 배열을 반환합니다. (배열)은 배열에 모든 public, private 및 protected 멤버가 그대로 배열로 캐스팅됩니다. 물론 모든 public은 물론입니다.
다소 더러운 방법은 PHP> = 5.2의 기본 JSON 함수를 사용하여 JSON으로 인코딩 한 다음 다시 배열로 디코딩하는 것입니다. 그러나 여기에는 사적이고 보호 된 회원은 포함되지 않습니다.
// The second parameter of json_decode forces parsing into an associative array $array = json_decode(json_encode($object), true);
또는 다음 함수는 여기에서 가져온 것으로 캐스팅을 사용하도록 수정 된 private 및 protected 멤버를 포함하여 객체에서 배열로 변환합니다.
function objectToArray ($object) { if(!is_object($object) && !is_array($object)) return $object; return array_map('objectToArray', (array) $object); }
-
==============================
3.JSON 인 코드 / 디코드 함수의 동작에 의존하여 깊게 중첩 된 객체를 연관 배열로 신속하게 변환 할 수 있습니다.
JSON 인 코드 / 디코드 함수의 동작에 의존하여 깊게 중첩 된 객체를 연관 배열로 신속하게 변환 할 수 있습니다.
$array = json_decode(json_encode($response->response->docs), true);
-
==============================
4.꼼꼼한:
꼼꼼한:
$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; }
-
==============================
5.
$array = json_decode(json_encode($object), true);
객체를 가지고 foreach를 수행하는 몇 가지 방법을 시도했는데, 이것이 내가 본 가장 쉽고 멋진 해결 방법이다. 한 줄만 :)
-
==============================
6.단순 버전 :
단순 버전 :
$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();
-
==============================
7.이 시도:-
이 시도:-
<?php print_r(json_decode(json_encode($response->response->docs),true)); ?>
-
==============================
8.나는 같은 문제가 있었고 위에서 언급 한 get_object_vars를 사용하여이 문제를 해결했습니다.
나는 같은 문제가 있었고 위에서 언급 한 get_object_vars를 사용하여이 문제를 해결했습니다.
게다가, json_decode로 객체를 변환해야하고 oldschool for "루프"(반복적으로 사용하지 않고)를 사용하여 배열을 반복해야했습니다.
-
==============================
9.PHP의 array_values () 메소드를 사용할 수도 있습니다.
PHP의 array_values () 메소드를 사용할 수도 있습니다.
-
==============================
10.앤티 언쇼 (Andy Earnshaw)의 답변에 문제가 발생했습니다. 응용 프로그램 내에서 별도의 클래스 인 "HelperFunctions"에이 함수를 포함 시켰기 때문에 objectToArray ()에 대한 재귀 호출이 실패했습니다.
앤티 언쇼 (Andy Earnshaw)의 답변에 문제가 발생했습니다. 응용 프로그램 내에서 별도의 클래스 인 "HelperFunctions"에이 함수를 포함 시켰기 때문에 objectToArray ()에 대한 재귀 호출이 실패했습니다.
array_map 호출에서 클래스 이름을 다음과 같이 지정하여이 문제를 극복했습니다.
public function objectToArray($object) { if (!is_object($object) && !is_array($object)) return $object; return array_map(array("HelperFunctions", "objectToArray"), (array) $object); }
나는이 글을 주석에 적었을 텐데 아직 충분한 평판이 없다.
-
==============================
11.
//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); } } }
from https://stackoverflow.com/questions/2476876/how-do-i-convert-an-object-to-an-array by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
변수에 저장된 문자열에서 PHP 함수를 호출하는 방법 (0) | 2018.09.10 |
---|---|
PDOException SQLSTATE [HY000] [2002] 그러한 파일 또는 디렉토리가 존재하지 않는다 (0) | 2018.09.10 |
PHP exec () vs system () vs passthru () (0) | 2018.09.10 |
데몬 프로세스로 PHP 스크립트 실행 (0) | 2018.09.10 |
양식 제출시 PHP $ _POST 배열이 비어 있습니다. (0) | 2018.09.10 |