【问题标题】:PHP associate arrayPHP 关联数组
【发布时间】:2015-04-15 02:46:26
【问题描述】:

我在下面有一个 print_r 的输出,我想使用 foreach 循环访问所有单个元素的值,但不幸的是我无法通过 foreach 做到这一点。谁能帮我解决关联数组的问题。 我可以通过这个$arr['Level1'][Date] 访问它,它返回值为“2015-04-14 07:15”。

但是如何通过 foreach 循环获取所有元素值呢?

Array
(
    [Level1] => Array
        (
            [Date] => 2015-04-14 07:15
            [img1] => pic1
            [img2] => pic2
            [InnerLevel] => Array
                (
                    [0] => value1
                    [1] => value2
                )

        )


    [Level2] => Array
        (
            [Date] => 2015-04-15 08:15
            [img1] => pic1
            [img2] => pic2
            [InnerLevel] => Array
                (
                    [0] => value3
                    [1] => value4
                )

        )

)

【问题讨论】:

  • 你之后的确切输出是什么?

标签: php


【解决方案1】:
<?php
foreach ($myarray as $level => $itemArr) {

    if(is_array($itemArr)) {
        foreach ($itemArr as $levelArr) {
            if(is_array($levelArr)) {
                foreach ($levelArr as $key => $interlevelValue) {
                    echo $interlevelValue;
                }
            } else {
            echo $levelArr;
            }
        }
    } else {
        echo $itemArr;
    }
}
?>

【讨论】:

    【解决方案2】:
    foreach ($myarray as $item) {
        echo $item['Date'] . "\n";
    }
    

    数组是否关联这一事实不会改变任何事情。

    $item 在 foreach 循环中依次是 $myarray['Level1'] 的副本,然后是 $myarray['Level2'](等等,如果更多)。

    【讨论】:

    • 谢谢卡西米尔!但上面的“Level1”和“Level2”也是动态值,所以我不能说 $myarray['Level1']。也可能有更多级别(1...n)?
    • @newbie83:这不是问题,这种方式完全忽略了项目“名称”(“键”是个好词),但如果你想知道,请改用foreach ($myarray as $key=&gt;$item) ,其中$key 包含密钥名称(例如Level1)。
    【解决方案3】:

    这取决于索引深度。

    要提取简单的关联数组,例如:

    $mainarray['Name']='Value';
    

    用途:

    foreach ($mainarray as $aname=>$avalue)
    {
        echo $aname." in ".$mainarray." = ".$avalue." <br>";
    }
    

    要提取更深层次的关联数组,例如:

    $mainarray['Child']['Name']='Value';
    

    用途:

    foreach ($mainarray as $aname=>$asubarray)
    {
        echo "In ".$aname." from ".$mainarray."...<br>";
        foreach ($asubarray as $asubname=>$asubvalue){
            echo $asubname." = ".$avalue." <br>";
        }
        echo "<br>";
    }
    

    这个:

    <br>
    

    代表新行。如果您正在从命令行运行代码,或者您只想输出纯文本,则将其用于新行:

    \n
    

    【讨论】:

      【解决方案4】:

      其实在php中还有另外一种方法。

      “使用 Spl 迭代器可以轻松地迭代多维数组:

      $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
      
      foreach($iterator as $key=>$value) {
          echo $key.' -- '.$value.'<br />';
      }
      

      这将遍历所有可能的可迭代对象。 见

      " - 引自 - https://stackoverflow.com/a/2149106/1766122 @Gordon 回答

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-31
        • 2011-07-11
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        • 2012-08-30
        相关资源
        最近更新 更多