PHP – Das Durchlaufen eines Objekts schlägt fehl, wenn der Wert des Elements nicht vom Typ „String' ist
P粉769045426
2023-07-30 18:07:04
<p>Ich habe eine einfache Frage, aber egal was passiert, ich verstehe nicht, was los ist. Ich habe eine JSON-Zeichenfolge, die so aussieht: </p>
<pre class="brush:php;toolbar:false;">{
„network_title“: „Netzwerk“,
„class_title“: „Klasse“,
„Noten“: [{
„number“: „Pre-K“,
„label“: „Vorkindergarten“,
„Bestellung“: 1,
„id“: „34567“
}, {
„Nummer“: „TK“,
„label“: „Übergangskindergarten“,
„Bestellung“: 2,
„id“: „23456“
}, {
"Nummer": "K",
„label“: „Kindergarten“,
„Bestellung“: 3,
„id“: „12345“
}]
}</pre>
<p>Es wird in ein Array wie dieses konvertiert (aus einem bestimmten Grund): </p>
<pre class="brush:php;toolbar:false;">array:3 [
"network_title" =>
"class_title" =>
"grades" => array:3 [
0 => Array:4 [
„Anzahl“ => „Pre-K“
"label" =>
"Bestellung" =>
„gid“ => „aa71da69-93ab-11e9-bda9-06f442b19d06“
]
1 => array:4 [
„Anzahl“ => „TK“
"label" =>
"Bestellung" =>
„gid“ => „d3c6754a-6298-48d0-9afa-6a19bafb8464“
]
2 => array:4 [
„Anzahl“ => „K“
"label" =>
"Bestellung" =>
"gid" => "a815a771-9aff-4020-b7d2-0c95a05da21e"
]
]
]</pre>
<p>Dann versuche ich, das Array zu durchlaufen, und wenn es ein Element findet, dessen Typ kein String ist (wie das order-Element), wird ein ungültiges Argument für den Fehler „foreach()“ angegeben. Die Fehlermeldung besagt, dass die foreach()-Zeile problematisch ist. Hier ist ein Codebeispiel: </p>
<pre class="brush:php;toolbar:false;">foreach ($arrTree as $k => $v)
{
if (is_string($v))
{
//Mach hier etwas
}
}</pre>
<p>Ich bin mir sicher, dass mir hier etwas Grundlegendes fehlt, aber ich bin es leid, nach Problemen zu suchen. Danke. </p>
问题在于 $arrTree 是一个多维数组。
您的代码中的 foreach 循环只遍历了数组的第一层,而没有遍历嵌套的数组(如 "grades")。当它遇到 "grades" 时,$v 的值不是字符串,而是一个数组,这就是为什么 is_string($v) 检查失败的原因。
您需要添加一个嵌套的 foreach 循环来处理这个结构。
以下是一个示例,展示了如何实现这一点:
foreach ($arrTree as $k => $v) { if (is_string($v)) { //Do something here } else if (is_array($v)) { foreach($v as $key => $value) { if(is_string($value)) { //Do something here } else if(is_array($value)) { foreach($value as $innerKey => $innerValue) { if(is_string($innerValue)) { //Do something here } } } } } }