>백엔드 개발 >PHP 문제 >PHP 2차원 배열은 json일 수 없습니다.

PHP 2차원 배열은 json일 수 없습니다.

WBOY
WBOY원래의
2023-05-06 09:32:07684검색

PHP 개발에서는 전송이나 저장을 위해 데이터를 JSON 형식으로 변환해야 하는 경우가 많습니다. 그런데 json_encode 함수를 통해 2차원 배열을 JSON으로 변환할 때 예상치 못한 문제가 발생하는 경우가 있다. 예를 들어 1차원 데이터만 JSON으로 변환되거나, JSON 형식이 불규칙한 경우가 있다. 이번 글에서는 PHP 2차원 배열을 JSON으로 변환할 수 없는 이유와 해결 방법에 대해 알아보겠습니다.

  1. PHP 2차원 배열을 JSON으로 변환할 수 없는 이유는 무엇인가요?

PHP에서 json_encode 함수는 1차원 배열이나 객체만 입력으로 받아들일 수 있습니다. 그렇지 않으면 변환 중에 일부 문제가 발생할 수 있습니다. 이는 JSON 형식이 배열, 객체와 같은 단순한 데이터 구조만 표현할 수 있고 리소스, 클로저, 무한 재귀 등과 같은 더 복잡한 데이터 유형을 표현할 수 없기 때문입니다.

json_encode 함수가 2차원 이상의 배열을 입력으로 허용하는 경우 JSON 형식에서는 모든 데이터가 배열 또는 개체여야 하고 이러한 배열이나 개체에 다른 배열이나 개체가 포함될 수 있으므로 이로 인해 일부 데이터 구조가 복잡해집니다. . 이로 인해 json_encode 함수는 이러한 데이터를 처리할 때 중첩 수준이 너무 많은 데이터 구조를 문자열로 변환하고 불규칙한 JSON 형식이 나타납니다.

  1. 2차원 배열을 JSON으로 변환할 수 없는 문제를 어떻게 해결하나요?

json_encode 함수가 2차원 배열의 변환을 직접 지원할 수는 없지만 몇 가지 기술과 방법을 통해 이 목표를 달성할 수 있습니다. 해결 방법은 다음과 같습니다.

(1) 배열의 개체 사용

다차원 배열의 각 하위 배열을 개체로 변환합니다. 이것의 장점은 json_encode가 개체를 올바르게 식별하여 데이터를 JSON 형식으로 올바르게 변환할 수 있다는 것입니다.

다음은 2차원 배열을 객체로 변환하는 예입니다.

$multiArray = array(
    "John"  => array("age"=>32, "gender"=>"male"), 
    "Jane"  => array("age"=>28, "gender"=>"female")
);
 
$multiObject = new \stdClass();
foreach ($multiArray as $key => $val) {
    $multiObject->$key = (object)$val;
}
 
echo json_encode($multiObject);

출력 결과:

{
    "John": {
        "age": 32,
        "gender": "male"
    },
    "Jane": {
        "age": 28,
        "gender": "female"
    }
}

(2) Deep Recursive 함수를 사용합니다.

또 다른 방법은 Deep Recursive 함수를 사용하여 Multi를 변환하는 것입니다. -차원 배열을 단일 수준 구조의 배열로 변환하고 JSON으로 인코딩하기 전에 다시 다차원 배열로 변환합니다. 다음은 함수 예입니다.

function flattenArray($arrayName) {
    $out = array();
    foreach ($arrayName as $key => $subArray) {
        if (is_array($subArray)) {
            $out = array_merge($out, flattenArray($subArray, $key.'_'));
        } else {
            $out[$key] = $subArray;
        }
     }
     return $out;
}

다음 코드를 사용하여 결과를 JSON 형식으로 인코딩할 수 있습니다.

$data = array(
    array(
        "name" => "John",
        "age" => 32,
        "gender" => "male",
        "hobbies" => array("music", "books"),
    ),
    array(
        "name" => "Jane",
        "age" => 28,
        "gender" => "female",
        "hobbies" => array("movies", "travel"),
    ),
);
 
$flatData = array_map('flattenArray', $data);
 
echo json_encode($flatData);

출력 결과:

[
    {
        "name": "John",
        "age": 32,
        "gender": "male",
        "hobbies_0": "music",
        "hobbies_1": "books"
    },
    {
        "name": "Jane",
        "age": 28,
        "gender": "female",
        "hobbies_0": "movies",
        "hobbies_1": "travel"
    }
]
  1. 요약

PHP에서 json_encode 함수는 1차원 배열만 허용합니다. 또는 객체는 입력으로 사용되지만 다차원 배열은 JSON 형식으로 직접 변환할 수 없습니다. 그러나 배열의 하위 배열을 객체로 변환, 심층 재귀 함수 사용 등과 같은 일부 기술과 방법을 사용하여 다차원 배열을 JSON 형식으로 변환할 수 있습니다. 실제 프로젝트에서는 필요에 따라 문제를 해결하기 위한 적절한 방법을 선택할 수 있습니다.

위 내용은 PHP 2차원 배열은 json일 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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