通过PHP多维数组解析

时间:2014-01-13 23:04:33

标签: php json multidimensional-array

我有一个多维数组,我试图解析它,它会抛出奇怪的结果(或者我只是忽略了一些简单的事情)。以下是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来自哪里?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

问题是您首先循环使用'DateGenerated'键。

来自

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

正被转换为int(0),并且引用了那里的第一个字符,即2。

答案 2 :(得分:0)

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

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 />";
    }
}