>백엔드 개발 >PHP 문제 >변환 없이 PHP json_encode 배열을 얻는 방법

변환 없이 PHP json_encode 배열을 얻는 방법

PHPz
PHPz원래의
2023-04-21 09:09:35700검색

PHP의 json_encode 함수는 PHP 변수를 JSON 형식 문자열로 변환합니다. 가장 일반적인 방법은 PHP의 배열을 JSON 형식의 문자열로 변환하는 것입니다. 그러나 어떤 경우에는 json_encode 함수가 배열을 변환하지 않기를 원할 수도 있습니다. 이번 글에서는 이 목표를 달성하는 방법을 살펴보겠습니다.

먼저 json_encode 함수가 기본적으로 배열을 변환하는 방법을 살펴보겠습니다. 다음과 같은 PHP 배열이 있다고 가정합니다.

$array = array(
    "name" => "John",
    "age" => 30,
    "hobbies" => array("reading", "swimming", "traveling")
);

이 배열을 json_encode 함수에 전달하면 함수는 다음 JSON 형식의 문자열을 반환합니다.

{
    "name": "John",
    "age": 30,
    "hobbies": ["reading", "swimming", "traveling"]
}

보시다시피 함수는 "hobbies"의 값을 변경했습니다. PHP의 키 하위 배열은 JSON 배열로 변환됩니다. 이는 PHP 데이터를 계층별로 JSON 형식으로 재귀적으로 변환하는 방법을 제공하므로 대부분의 경우에 유용합니다.

그러나 어떤 경우에는 json_encode 함수가 배열을 변환하지 않고 원래 PHP 배열로 유지하기를 원합니다. 이를 달성하는 방법이 있는데, 그것은 배열에 특별한 자리 표시자를 사용하는 것입니다.

배열의 각 하위 배열을 자리 표시자로 바꾼 다음 json_encode 함수의 콜백 함수를 사용하여 이러한 자리 표시자를 다시 일반 하위 배열로 바꿀 수 있습니다. 예는 다음과 같습니다.

$array = array(
    "name" => "John",
    "age" => 30,
    "hobbies" => "[[subarray]]"
);

function replaceSubarrays($data) {
    if(is_array($data)) {
        if(in_array("[[subarray]]", $data)) {
            $data = array_map("replaceSubarrays", $data);
        }
    } elseif ($data == "[[subarray]]") {
        $data = array();
    }
    return $data;
}

$json = json_encode(array_map("replaceSubarrays", $array));

echo $json;

이 예에서는 "hobbies" 키의 값을 값이 하위 배열임을 나타내는 특수 자리 표시자인 "[[subarray]]"로 바꿉니다. 또한 이 자리 표시자를 처리하기 위해 콜백 함수인 replacementSubarrays를 정의합니다. 모든 배열 요소를 반복적으로 반복하고 자리 표시자가 포함된 모든 하위 배열을 찾아 빈 배열로 바꿉니다. 그런 다음 json_encode 함수와 array_map 함수를 사용하여 전체 배열을 콜백 함수에 전달하고 하위 배열을 교체합니다.

이 예제를 실행하면 다음 문자열이 JSON 형식으로 표시됩니다.

{
    "name": "John",
    "age": 30,
    "hobbies": "[[subarray]]"
}

예상한 대로 "hobbies" 키의 값은 JSON 배열로 변환되지 않고 "[[subarray] ]"로 유지됩니다. 끈.

자리 표시자를 사용하는 이 접근 방식에는 몇 가지 추가 작업이 필요하지만 json_encode 함수가 원래 PHP 배열을 유지하여 더 높은 수준의 방식으로 데이터를 처리할 수 있습니다.

위 내용은 변환 없이 PHP json_encode 배열을 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.