代码之家  ›  专栏  ›  技术社区  ›  drewrockshard

第一个子级的PHP数组处理

  •  0
  • drewrockshard  · 技术社区  · 14 年前

    我厌倦了今天的阵列-把我扔得到处都是。

    下面是一个数组的输出:

    Array
    (
    [2010091907] => Array
        (
            [home] => Array
                (
                    [score] => Array
                        (
                            [1] => 7
                            [2] => 17
                            [3] => 10
                            [4] => 7
                            [5] => 0
                            [T] => 41
                        )
    
                    [abbr] => ATL
                    [to] => 2
                )
    
    Array
    (
    [2010091909] => Array
        (
            [home] => Array
                (
                    [score] => Array
                        (
                            [1] => 7
                            [2] => 17
                            [3] => 10
                            [4] => 7
                            [5] => 0
                            [T] => 41
                        )
    
                    [abbr] => ATL
                    [to] => 2
                )
    
    Array
    (
    [2010091901] => Array
        (
            [home] => Array
                (
                    [score] => Array
                        (
                            [1] => 7
                            [2] => 17
                            [3] => 10
                            [4] => 7
                            [5] => 0
                            [T] => 41
                        )
    
                    [abbr] => ATL
                    [to] => 2
                )
    

    我要写一个preg\u匹配来迭代每个 [2010091907] ,但在此之前,我不明白如何获得这条信息,或如何称呼它。我会这样做:

    $json=json_decode($data,true);
    foreach ($json['dont-know-what-to-call-it'] as $key => $value) {
                echo "Key: ".$key."; Value: ".$value."<br />";
    }
    

    我只是不知道如何称呼这些[2010091901]块中的每一个,比如我应该怎么称呼它们。我知道怎么把这些东西叫做分数,因为它被命名为“分数”,而且数据都在分数之下。我不知道如何获取数组的初始“部分”的键/值。最后,我要抓取每个[2010091901],操作/使用每个[2010091901]之间的数据,然后转到下一个“记录”。

    3 回复  |  直到 14 年前
        1
  •  2
  •   brian_d    14 年前

    $date_keys = array_keys($json) 会给 (0 => 2010091907, 1 => 2010091909, ...)

    foreach ($date_keys as $d) {
       foreach ($json[$d] as $key => $value) {
    ...
    

    另外,如果您实际上不需要外部数组的索引(日期值-2010091907,等等),那么您可以这样做

    foreach ($json as $j) {
       foreach ($j as $key => $value) {
    ...
    

    忽略 $json

        2
  •  1
  •   Wrikken    14 年前

    你不能就这样窝吗 foreach()

    foreach($jsondata as $somedate => $value){
        //do you actually need $somedate?
        foreach($value['home']['score'] as $score){
            echo $score.PHP_EOL;
        }
    }
    
        3
  •  0
  •   davidtbernal    14 年前

    你可以这样做

    $json = json_decode($data, true);
    foreach($json as $ymd => $data)
    {
        // $ymd = [2010091907, 2010091909,… ]
        // $data is the array starting with the key home. so $data['home']['score'][1] = 7 for the first iteration
    }
    

    这能回答你的问题吗?你问的不是100%清楚