【问题标题】:PHP Array handling for first children第一个孩子的PHP数组处理
【发布时间】:2010-09-20 20:37:26
【问题描述】:

我今天厌倦了阵列 - 把我扔得满地都是。

所以,这里是一个数组的输出:

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_match 来迭代每个 [2010091907],但在此之前,我不明白如何获取这条信息,或者如何调用它。我会做类似的事情:

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

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

【问题讨论】:

  • 为什么需要use regex
  • 我现在没有,因为这实际上为我抓取了每个数字,而不使用正则表达式。我对数组很陌生。

标签: php arrays json foreach


【解决方案1】:

$date_keys = array_keys($json) 会给出 (0 =&gt; 2010091907, 1 =&gt; 2010091909, ...) 。那你就可以了

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

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

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

忽略$json的键

【讨论】:

    【解决方案2】:

    你不能只嵌套foreach()s吗?

    foreach($jsondata as $somedate => $value){
        //do you actually need $somedate?
        foreach($value['home']['score'] as $score){
            echo $score.PHP_EOL;
        }
    }
    

    【讨论】:

    • 我没有时间测试这个,但我真的很喜欢这种方法,因为它很简单。我实际上会让 foreach 成为一个通过 rel 接收数据的函数,该函数可以调用自己。它将能够循环直到用完子节点。避免使用 while() 或其任何变体。
    【解决方案3】:

    你可以这样做

    $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% 清楚你在问什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-11
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多