【问题标题】:PHP iterate through multidimensional associative array and print itemsPHP遍历多维关联数组并打印项目
【发布时间】:2017-05-08 13:45:50
【问题描述】:

我有以下数组(从 JSON 解码):

Array
(
    [playerInfo] => Array
        (
            [hint] => 
            [infoText] => Array
                (
                    [multiLineMode] => 
                    [subText1] => TLC
                    [subText2] => Christmas Pop
                    [title] => Sleigh Ride
                )

            [isPlayingInLemur] => 
            [lyrics] => 
            [mainArt] => Array
                (
                    [altText] => Album Art
                    [artType] => UrlArtSource
                    [contentType] => image/jpeg
                    [url] => https://images-na.sS500_.jpg
                )

            [mediaId] => 958d47b9:16
            [miniArt] => Array
                (
                    [altText] => Album Art
                    [artType] => UrlArtSource
                    [contentType] => image/jpeg
                    [url] => https://images-n._SS48_.jpg
                )

            [miniInfoText] => Array
                (
                    [multiLineMode] => 
                    [subText1] => TLC
                    [subText2] => Prime Music
                    [title] => Sleigh Ride
                )

            [playbackSource] => 
            [playingInLemurId] => 
            [progress] => Array
                (
                    [allowScrubbing] => 1
                    [locationInfo] => 
                    [mediaLength] => 223
                    [mediaProgress] => 80
                    [showTiming] => 1
                    [visible] => 1
                )

            [provider] => Array
                (
                    [artOverlay] => PRIME_SASH
                    [fallbackMainArt] => Array
                        (
                            [altText] => 
                            [artType] => IconArtSource
                            [iconId] => music-no-art
                            [iconStyles] => 
                        )

                    [providerLogo] => Array
                        (
                            [altText] => Amazon Music
                            [artType] => IconArtSource
                            [iconId] => amazon-music
                            [iconStyles] => 
                        )

                    [providerName] => Prime Music
                )

            [queueId] => 958d47
            [state] => PAUSED
            [template] => 
            [transport] => Array
                (
                    [layoutType] => MusicTransportLayout
                    [lyrics] => HIDDEN
                    [next] => ENABLED
                    [playPause] => ENABLED
                    [previous] => ENABLED
                    [repeat] => ENABLED
                    [shuffle] => ENABLED
                )

            [volume] => Array
                (
                    [muted] => 
                    [volume] => 40
                )

        )

)

我有以下 foreach 循环,它打印 infoText 数组中的每个项目 (4)。

<?php
    foreach ($player['playerInfo']['infoText'] as $music) {
        echo $music;
    }
?>

但我希望能够仅打印 infoText 数组中的 [title]、playerInfo 父数组中的 [state] 和 volume 数组中的 [volume]。有没有一种优雅的方式来做到这一点?另外,由于我使用的是 foreach,所以我只获得了该对的值,但我还需要密钥。这样我就可以打印我需要的特定项目。

【问题讨论】:

  • &lt;?php echo 'STATE: '.$data['playerInfo']['state'].' &lt;br /&gt; Title: '.$data['playerInfo']['infoText']['title']; ?&gt;
  • "由于我使用的是foreach,所以我只得到了pair的值,但我还需要key。" foreach ($array as $key =&gt; $value)
  • @Jhecht foreach 应该是什么?感谢您的回复
  • @Greg 如果可以直接访问元素,为什么还需要 foreach 循环?

标签: php arrays json multidimensional-array foreach


【解决方案1】:

您可能想尝试递归函数,这样您就不必跟踪所有这些键。我为这个例子缩短了你的数组,但无论尺寸如何,它都应该适合你。只需为 $searchterms 参数提供获取数组中值的键即可。

function array_recursion(array $myarray, array $searchterms)
{
        foreach ($myarray as $key => $value)
        {
                if (is_array($value)) array_recursion($value, $searchterms);
                else if (in_array($key, $searchterms)) print $key . ": " . $value . "\n";

        }
}

$myarray = Array(
        'playerInfo' => Array(
                'hint' => '',
                'infoText' => Array(
                        'multiLineMode' => '',
                        'subText1' => 'TLC',
                        'subText2' => 'Christmas Pop',
                        'title' => 'Sleigh Ride'
                ),
                'state' => 'PAUSED',
                'volume' => Array(
                        'muted' => '',
                        'volume' => 40
                        )
        )
);

array_recursion($myarray, Array('state', 'title', 'volume'));

【讨论】:

    【解决方案2】:

    好像 'infoText' 是一个包含标题的数组,你可以这样做:

    <?php
    foreach ($player as $key => $music) {
        echo $music['infoText']['title'];
    }
    

    然后你也可以使用$key 来获取当前迭代的数组键。

    【讨论】:

    • 这会打印出每次迭代中的第一个字符。
    • 我认为您不需要为此进行递归。当您具有未知深度级别的嵌套数据树时,递归是合适的。在这种情况下,密钥结构似乎遵循可以预期的非常具体的模式,使得递归有些多余。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2020-04-11
    • 2013-07-05
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多