PHP - 如果元素的值不是字符串类型,则遍历对象会失败
P粉769045426
P粉769045426 2023-07-30 18:07:04
[PHP讨论组]

我有一个简单的问题,但是无论如何,我都无法弄清楚发生了什么。我有一个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
                    }
                }
            }
        }
    }
} 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号