PHP - 요소의 값이 문자열 유형이 아닌 경우 객체 탐색이 실패합니다.
P粉769045426
2023-07-30 18:07:04
<p>간단한 질문이 있는데 무슨 일이 일어나고 있는지 알 수 없습니다. 다음과 같은 JSON 문자열이 있습니다. </p>
<pre class="brush:php;toolbar:false;">{
"network_title": "네트워크",
"class_title": "클래스",
"성적": [{
"번호": "유치원",
"label": "유치원생",
"주문": 1,
"ID": "34567"
}, {
"번호": "TK",
"label": "임시 유치원",
"주문": 2,
"ID": "23456"
}, {
"번호": "K",
"label": "유치원",
"주문": 3,
"ID": "12345"
}]
}</pre>
<p>(특정한 이유로) 다음과 같은 배열로 변환됩니다. </p>
<pre class="brush:php;toolbar:false;">배열:3 [
"network_title" => "네트워크"
"class_title" => "클래스"
"성적" => 배열:3 [
0 => 배열:4 [
"번호" => "유치원"
"라벨" => "유치원"
"주문" => 1
"gid" => "aa71da69-93ab-11e9-bda9-06f442b19d06"
]
1 => 배열:4 [
"번호" => "TK"
"라벨" => "임시 유치원"
"주문" => 2
"gid" => "d3c6754a-6298-48d0-9afa-6a19bafb8464"
]
2 => 배열:4 [
"번호" => "K"
"라벨" => "유치원"
"주문" => 3
"gid" => "a815a771-9aff-4020-b7d2-0c95a05da21e"
]
]
]</pre>
<p>그런 다음 배열을 반복하려고 시도하고 유형이 문자열이 아닌 요소(예: order 요소)를 찾으면 foreach() 오류에 대해 잘못된 인수가 제공됩니다. 오류 메시지는 foreach() 행에 문제가 있음을 나타냅니다. 다음은 코드 예입니다. </p>
<pre class="brush:php;toolbar:false;">foreach($arrTree as $k => $v)
{
if (is_string($v))
{
//여기서 뭔가를 하세요
}
}</pre>
<p>여기서 기본적인 내용이 빠졌다고 확신하지만 문제를 찾는 데 지쳤습니다. 감사해요. </p>
문제는 $arrTree가 다차원 배열이라는 것입니다.
코드의 foreach 루프는 중첩된 배열(예: "등급")이 아닌 배열의 첫 번째 수준만 통과합니다. "등급"이 발견되면 $v의 값은 문자열이 아니라 배열이므로 is_string($v) 검사가 실패합니다.
이 구조를 처리하려면 중첩된 foreach 루프를 추가해야 합니다.
다음은 이를 달성하는 방법을 보여주는 예입니다.
으아아아