【问题标题】:Parse Through PHP Multidimensional Array通过 PHP 多维数组解析
【发布时间】:2014-01-13 23:04:33
【问题描述】:

我有一个多维数组,我试图解析它,但它会返回奇怪的结果(或者我只是忽略了一些简单的东西)。这是从开头开始的 json_decode 的示例 print_r:

Array
(
    [DateGenerated] => 2014-01-12T19:30:21.897
    [Corporation] => Array
        (
            [CorporateBuilderNumber] => MHI
            [CorporateState] => TX
            [CorporateName] => McGuyer Homebuilders, Inc.
            [Builder] => Array
                (
                    [0] => Array
                        (
                            [BuilderNumber] => COV
                            [BrandName] => Coventry Homes
                            [ReportingName] => Coventry Homes
                            [DefaultLeadsEmail] => appsupport@mhinc.com
                            [BuilderWebsite] => http://www.coventryhomes.com
                            [Subdivision] => Array

使用此代码时:

<?php
mysql_connect("localhost", "", "");
mysql_select_db("");

$json_data = file_get_contents('mhi.json');
$json = json_decode($json_data, true);

foreach ($json as $value) {
    echo $value['CorporateBuilderNumber'] . "<br />";
    echo $value['CorporateState'] . "<br />";
    echo $value['CorporateName'] . "<br />";
}

?>

我得到这个作为输出:

2
2
2
MHI
TX
McGuyer Homebuilders, Inc.

那 2 是从哪里来的?

【问题讨论】:

  • foreach ($json as $key=&gt;$value)?
  • 在 foreach 语句中省略 $key 没有问题。我觉得 2 可能来自一些早期的代码。你在你的 foreach 语句之前有什么?
  • 我意识到发生了什么并在下面提交了答案。
  • @Scopey:对,我看错了。
  • 您的代码没有尝试将其作为多维数组处理。我认为您需要查看$value['Corporation']['CorporateBuilderNumber']$value['Corporation']['CorporateState']$value['Corporation']['Builder'][0]['BuilderNumber'] 等等。

标签: php json multidimensional-array


【解决方案1】:

循环中的第一次,$value 包含 "2014-01-12T19:30:21.897"

当您尝试访问 $value['CorporateBuilderNumber'] 并且该密钥不存在时,它会转换为 $value[0],这是字符串的第一个字符 2

【讨论】:

  • 这是正确答案。我结束了使用 XML 并完成了我需要完成的工作。谢谢!
【解决方案2】:

问题是您首先循环通过您的“日期生成”键。

所有来自

的字符串
echo $value['CorporateBuilderNumber'] . "<br />";
echo $value['CorporateState'] . "<br />";
echo $value['CorporateName'] . "<br />";

正在被转换为 int(0),并且正在引用您在那里拥有的日期的第一个字符,即 2。

【讨论】:

    【解决方案3】:

    你可以用这个来运行你的表:

    foreach ($json as $key => $value) {
        if (is_array($value) ){
            foreach( $value as $key2 => $value2){
                if( is_array($values2) ) {
                    foreach( $value2 as $key3 => $value3){
                        echo $value3. "<br />";
                    }       
                } 
                else{
                    echo $value2. "<br />";
                }
            }
        }
        else {
            echo $value. "<br />";
        }
    }
    

    【讨论】:

    • 好的,我知道你在那里做了什么。
    • 您可以继续使用更多 foreach,因为我看到您的 print_r 样本中有第四个数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2020-11-23
    相关资源
    最近更新 更多