PHP - 如果元素的值不是字串類型,則遍歷物件會失敗
P粉769045426
P粉769045426 2023-07-30 18:07:04
0
1
409

我有一個簡單的問題,但無論如何,我都無法弄清楚發生了什麼事。我有一個JSON字串,看起來像這樣:

{ "network_title": "Network", "class_title": "Class", "grades": [{ "number": "Pre-K", "label": "Pre-Kindergarten", "order": 1, "id": "34567" }, { "number": "TK", "label": "Transitional Kindergarten", "order": 2, "id": "23456" }, { "number": "K", "label": "Kindergarten", "order": 3, "id": "12345" }] }

它被轉換為以下這樣的陣列(出於特定的原因):

array:3 [ "network_title" => "Network" "class_title" => "Class" "grades" => array:3 [ 0 => array:4 [ "number" => "Pre-K" "label" => "Pre-Kindergarten" "order" => 1 "gid" => "aa71da69-93ab-11e9-bda9-06f442b19d06" ] 1 => array:4 [ "number" => "TK" "label" => "Transitional Kindergarten" "order" => 2 "gid" => "d3c6754a-6298-48d0-9afa-6a19bafb8464" ] 2 => array:4 [ "number" => "K" "label" => "Kindergarten" "order" => 3 "gid" => "a815a771-9aff-4020-b7d2-0c95a05da21e" ] ] ]

然後我嘗試遍歷數組,當它找到一個元素的類型不是字串(例如 order 元素)時,就會出現 Invalid argument supplied for foreach() 的錯誤。錯誤訊息顯示 foreach() 行是有問題的。以下是程式碼範例:

foreach ($arrTree as $k => $v) { if (is_string($v)) { //Do something here } }

我確定我在這裡漏掉了一些基本的東西,但是我已經厭倦了尋找問題。謝謝。

P粉769045426
P粉769045426

全部回覆 (1)
P粉615886660

問題在於 $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 } } } } } }
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!