【问题标题】:PHP Can't print all keys name in array with array_walk()PHP无法使用array_walk()打印数组中的所有键名
【发布时间】:2016-04-07 12:50:34
【问题描述】:

我的画廊文件夹结构如下:

/年/月/日/文件

然后,我将在我的网站上打印它们。我有一个函数可以使用这个结构获取一个大数组中的所有文件:

Array
(
    [2017] => Array
        (
            [01] => Array
                (
                    [01] => Array
                        (
                            [0] => yo.jpg
                        )

                )

        )

    [2016] => Array
        (
            [02] => Array
                (
                    [01] => Array
                        (
                            [0] => yo.jpg
                        )

                )

            [01] => Array
                (
                    [03] => Array
                        (
                            [0] => timed-photos10.jpg
                        )

                    [01] => Array
                        (
                            [0] => yo.jpg
                        )

                )

        )

)

然后,我创建了一个打印这些图像的新功能,我需要让他们的路径读取他们所有的数组键。

这是我的功能:

// ...
array_walk($mediaList, array($this, 'generateMedia'));      

public function generateMedia(&$value, $key)
{
    if(is_array($value))
    {
        echo $key . "/";
        array_walk($value, array($this, 'generateMedia'));
    }
    else
    {
        echo $value . "<br>";
    }
}

当一个数组有多个数组时,问题就来了。

我得到的结果是下一个:

2017/01/01/yo.jpg
2016/02/01/yo.jpg
01/03/timed-photos10.jpg
01/yo.jpg

如您所见,第一条和第二条记录都可以,但第三条和第四条记录不正确,因为这些元素有多个数组。

我一直在尝试不同的事情,但我无法解决它。

我能做什么?

谢谢!

【问题讨论】:

    标签: arrays recursion tree key array-walk


    【解决方案1】:

    尚未测试您的代码,但这会起作用:

    foreach ($mediaList as $year => $months) {
      foreach ($months as $month => $days) {
        foreach ($days as $day => $files) {
          foreach ($files as $key => $file) {
            echo $year . '/' . $month . '/' . $day . '/' . $file;
          }
        }
      }
    }
    

    【讨论】:

    • 谢谢兄弟!它工作正常。我正在使用 array_walk 函数,我想使用它,但是您的代码更简单。
    • 很高兴听到@viher。如果它按预期工作,请接受答案。
    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 2012-12-10
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多