php循环处理复杂的帖子


php loop through complex posts

我是web编程的新手,我的工作中有很多复杂的帖子,这是var_dump($_POST)的结果,我使用gettype()函数来确定$arr数组中的值是否是另一个数组,我不方便我的代码有这样的行为,也不方便我在循环插入时经常遇到的问题

问题是,是否有更聪明的技术可以像这样在复杂的帖子中循环,其次是如何在称为assistant(称为assistant['name']assistant[phone])的二维数组中捕获名称、电话

<?php
    $arr = array(
                 "name"=> "mmmkkkk", 
                 "phones"=> array(
                                  "01553338897" , 
                                  "09090909098"
                                 ), 
                 "address"=> "107 ostras., Germany", 
                 "assistant"=> array(
                                      "name" => array(
                                                      "kmkkm",
                                                      "komar"
                                                     ), 
                                      "phone"=> array(
                                                      "01043338897" , 
                                                      "09099090090"
                                                     )
                                   )
                );
    foreach($arr as $key => $p_value)
    {
            if(gettype($p_value)=="array")
            {
                echo $key.":"."</br>";
                foreach($p_value as $newp_value => $val )
                {
                    if(gettype($val)=="array")
                    {
                        foreach($val as $vkey)
                        {
                            echo $vkey."</br>"; 
                        }
                    }
                    else{echo $val."</br>";}
                }       
            }else{echo $key.":".$p_value."</br>";}
    }   
    ?>

您可以像这样使用Recursive函数。

<?php
    $arr = array(
                 "name"=> "mmmkkkk", 
                 "phones"=> array(
                                  "01553338897" , 
                                  "09090909098"
                                 ), 
                 "address"=> "107 ostras., Germany", 
                 "assistant"=> array(
                                      "name" => array(
                                                      "kmkkm",
                                                      "komar"
                                                     ), 
                                      "phone"=> array(
                                                      "01043338897" , 
                                                      "09099090090"
                                                     )
                                   )
                );
    function rec($arr) {
        foreach($arr as $key => $p_value)
        {
            if (is_array($p_value)) {
                rec($p_value);
            } else {
                echo $key.":".$p_value."'n";
            }
        }
    }
    rec($arr);
?>

考虑递归

function walkThrough($array, $tabulation = 0) {
    foreach($array as $key => $value) {
        printf ('%s%s:', str_repeat(4*$tabulation, '&nbsp;'));
        if (is_array($value))   walkThrough ( $value, ($tabulation+1) );
        else                   printf('%s<br />', $value);
    }
}

使用此递归函数

function recursivefunc($arr,$key =''){
if(is_array($arr)){
    foreach($arr as $k => $v){
        if (is_array($v) && !empty($v)) {
            recursivefunc($v,$k);
        } else {
            $keys = ($key=='') ? $k : $key;
            echo $keys.":".$v.'</br>';
        }
    }
}
}
recursivefunc($arr);

输出:

name:mmmkkkk
phones:01553338897
phones:09090909098
address:107 ostras., Germany
name:kmkkm
name:komar
phone:01043338897
phone:09099090090