繁体   English   中英

PHP的:打印与嵌套数组关联数组

[英]PHP :Printing Associative Array with nested array

我有一个包含关联数组的多维数组,在关联数组中,我有一个名为'opt'的键,它包含一个数组。 我遍历了整个多维数组。 我想使其更加简化,并且摆脱 检查键是否为'opt'的原因,因为如果我有更多包含数组的键,那么我必须对包含数组的所有键进行检查。想以更具技术性的方式做。 简而言之,如何在遍历数组时检查$ value包含数组。

$myArr=array(
    array(
        'question' => 'First Question',
        'opt' => array('A','B','c','D'),
        'ans' => '3'
    ),
    array(
        'question' => 'Second Question',
        'opt' => array('A','B','c','D'),
        'ans' => '1'
    )
);
for($i=0; $i<count($myArr); $i++)
{
    foreach ($myArr[$i] as $key => $value) {
        if ($key!='opt') {
            echo $value . "<br/>";
        }
        else{
            for($ii=0; $ii<count($value); $ii++)
            {
                echo $value[$ii] . "<br />";
            }
        }
    }
}

您可以使用递归函数并使用foreach显示任何内容,如下所示:

function display_array($arr){
    if(gettype($arr) == 'array'){
        foreach($arr as $v){
            display_array($v);
        }
    }else{
        echo $arr . '<br>';
    }
}

这样称呼它:

display_array($myArr);

输出与您的代码相同。 在这里查看

根据您所需的输出,以一种良好的格式化方式“打印”此数组的最简单方法是:

echo "<pre>";
print_r($arr);
echo "</pre>";

这可能无法为用户提供演示,但是如果只是您自己“查看”结果,那就很好了。

您可以使用以下类轻松打印嵌套数组。 它以递归方式运行,因此无论有多少嵌套数组,有多少层都无关紧要。

<?php

class Debug
{
    public static function errorLog($text)
    {
        $lines = Debug::arrayToTextLines($text);
        foreach ($lines as $value) {
            error_log($value);
        }
    }

    public static function echo($text)
    {
        $lines = Debug::arrayToTextLines($text);
        foreach ($lines as $value) {
            echo $value;
        }
    }

    public static function arrayToTextLines($array, $nestLevel = 0)
    {
        $resultLines = array();
        $margin = "";
        for ($i = 0; $i < $nestLevel; $i++) {
            $margin = "  " . $margin;
        }

        if (gettype($array) == 'array') {
            foreach ($array as $key => $value) {
                $subValues = Debug::arrayToTextLines($value, $nestLevel + 1);
                if (count($subValues) > 1) {
                    $resultLines[] = $margin . $key . " => ";
                    $resultLines = array_merge($resultLines, $subValues);
                } else {
                    $resultLines[] = $margin . $key . " => " . $value;
                }
            }
        } else {
            $resultLines[] = $margin . $array;
        }

        return $resultLines;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM