Как зациклить 3-х мерный массив, используя foreach PHP - PullRequest
2 голосов
/ 28 марта 2012

Ниже приведены foreach и 3-х мерные массивы, никаких проблем с циклом, но я не могу отделить, какой массив отображать, они должны содержать целые массивы, такие как echo $ subvalue, есть ли лучшие решения с циклическим 3-мерным массивом?Я действительно чувствую себя странно с этим циклом.Спасибо в adv

foreach ($stories as $key => $story){
    //echo "<br />";
        foreach($story as $subkey => $subvalue){
            echo $subvalue."<br />";
                foreach($subvalue as $key => $subsubvalue){
                    echo $subsubvalue."<br />";
                }
        }
}

Array
(
    [270] => Array
        (
            [uid] => 36
            [user_email] => aaa@hotmail.com
            [sid] => 270
            [story_name] => Story C
            [photo_url] => Array
                (
                    [0] => story_photos/2012/0322/361332381418153311.jpg
                    [1] => story_photos/2012/0322/361332393792911587.jpg
                )

            [photo_added_date] => Array
                (
                    [0] => 1332381418
                    [1] => 1332393792
                )

        )

    [269] => Array
        (
        [uid] => 36
        [user_email] => aaa@hotmail.com
        [sid] => 269
        [story_name] => Story B
        [photo_url] => Array
            (
                [0] => story_photos/2012/0322/361332381406580761.jpg
            )

        [photo_added_date] => Array
            (
                [0] => 1332381406
            )

    )

[268] => Array
    (
        [uid] => 36
        [user_email] => aaa@hotmail.com
        [sid] => 268
        [story_name] => Story A
        [photo_url] => Array
            (
                [0] => story_photos/2012/0322/361332381393552719.jpg
            )

        [photo_added_date] => Array
            (
                [0] => 1332381393
            )

    )

)

Ответы [ 4 ]

3 голосов
/ 28 марта 2012

Или

function echoArray( $array )
{
    foreach ($array as $key => $cell)
    {
        if ( true == is_array($cell) )
        {
           echoArray($cell);
        }
        else
        {
            echo "$cell<br />";
        }
    }
}

Работает для N размерного массива

Улучшенная версия, чтобы узнать глубину и использовать другой класс CSS для глубины и использовать установить тег, в который следует добавить значение:

Например: для глубины 0 класс будет по arrayclass_0, для глубины 1 arrayclass_1 и т. Д ...

/**
$array : The array
$depth: The depth ( you should always set it to 0)
$cssclassprefix: The css class prefix you want to set
$tag: the default tag to use to render
$arraytagkey: An optionnal key in your array to extract the tag to use
*/
function echoArray( $array, $depth=0, $cssclassprefix='arrayclass_', $tag='div', $arraytagkey = '' )
{
    if ( 0 != strcmp($arraytagkey) && isset($array[$arraytagkey]) )
    {
       $tag=$array[$arraytagkey];
    }
    foreach ($array as $key => $cell)
    {
        if ( true == is_array($cell) )
        {
           echoArray($cell, $depth+1, $cssclassprefix, $tag, $arraytagkey);
        }
        else
        {
            $matches = array();
            if ( 0 != preg_match("/^(img|iframe|input)$/i",$tag) )
            {
                if ( 0 != strcasecmp('input',$tag) )
                {
                   echo "<input class='$cssclassprefix$depth' value='$cell' />";
                }
                else
                {
                   echo "<$tag class='$cssclassprefix$depth' src='$cell' />";
                }
            }
            else if( 0 != preg_match("/^(br|hr)$/i",$tag) )
            {
                echo "$cell<$tag />";
            }
            else
            {
                echo "<$tag class='$cssclassprefix$depth'>$cell</$tag>";
            }
        }
    }
}
3 голосов
/ 28 марта 2012

Почему бы не попробовать это:

foreach ($stories as $key => $story){
    if(is_array($story)){
        foreach($story as $subkey => $subvalue){
            if(is_array($subvalue)){
                foreach($subvalue as $key => $subsubvalue){
                    echo $subsubvalue."<br />";
                }
            } else {
                echo $subvalue."<br />";
            }
        }
    } else {
        echo $story."<br />";
    }
}

Кроме того, я не уверен, потому что ваш вопрос не совсем ясен или не указан.

0 голосов
/ 28 марта 2012

Вы просто хотите просмотреть и получить доступ к photo_urls и другим данным? Если это так, то вот простой пример того, как вы можете получить доступ к данным:

foreach($stories as $key => $story)
{

    // here you can echo the $store['user_email']  etc
    echo 'Email: ' . $story['user_email'] . '<br />';

    // loop over the photo urls
    foreach($story['photo_url'] as $photo_url)
    {
        echo 'Photo URL: ' . $photo_url . '<br />';
    }

    // loop over the photo added dates
    foreach($story['photo_added_date'] as $photo_added_date)
    {
        echo 'Photo Date: ' . $photo_added_date . '<br />';
    }

}

Если вы хотите рекурсивно искать в массиве, тогда вам нужны другие ответы.

0 голосов
/ 28 марта 2012

Это на самом деле не отвечает на ваш вопрос, но обратите внимание, ваш третий цикл такой:

foreach ($subvalue as $key => $subsubvalue){

Но вы уже использовали $ key в первом цикле:

foreach ($stories as $key => $story){

Вы должны изменить третий на:

foreach ($subvalue as $subsubkey => $subsubvalue){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...