如何使嵌套数组递归地返回某些值


How to make nested arrays return certain values recursively?

我有一个函数,它保存一个数组,然后对其进行json_encoded,它将json数组发送到数据库并从中提取结果。我需要做的是有一个递归数组。数组中有嵌套的数组,我需要提取一些值。这是我的代码:

 function attDir($attId){
    //$request = "{"Service":"webphone+","type":"attuid","criteria":"$attId","output":"partial","depth":"1"}";
    $arrRe = array();
    //Assoc array
    $arrRe['Service'] = "webphone+"; 
    $arrRe['type'] = "attuid";
    $arrRe['criteria'] = "$attId";
    $arrRe['output'] = "partial";
    $arrRe['depth'] = "all"; //Shows everyone that reports under this ID. "1" will show direct reports.
    $request = json_encode($arrRe);
    //echo $request;
    $fp = fsockopen( "loadbalancer.web.att.com", 5862 ); 
    if ( ! $fp ) 
    { 
        echo "Failed connection: 'n"; 
    } 
    else 
    { 
        fwrite($fp, "$request'n" ); 
        fwrite($fp, "end'n");   // required so SJ knows this is the end of the request 
        echo "Sending $request <br />"; 
        $result = array(); 
            while ( ! feof( $fp)) //while NOT end of file
            { 
                $line = rtrim(fgets( $fp, 1024000 )); //remove white space from right side of a string fgets(file, length) fgets gets line from file pointer
            if ( $line == "end" ) //if line = 'end' stop the program
            { 
                break; 
            } 
            $result[] = $line; 
            } 
        $decoded = json_decode( $result[1], true ); //json array decoded results 
         print "<pre>"; 
        print_r( $decoded ); //print out results from json array
        print "</pre>";
foreach (  $decoded as $attuid => $arrLvl1) 
{
//print_r($attuid);
if ( $attuid != "sub" ) 
{ 
  //echo "LV1: $attuid'n"; 
  echo "Attuid: ".  $arrLvl1['a1'] . "<br />"; 
  echo "F_Name: ".  $arrLvl1['givenName'] . "<br />"; 
  echo "L_Name: ".  $arrLvl1['sn'] . "<br />"; 
} 
else 
{ 
  foreach ( $arrLvl1 as $key1 => $arrLvl2 ) 
  {
        //echo $attuid; 
        echo "  Attuid: ".  $arrLvl2['a1'] . "<br />"; 
        echo "  F_Name: ".  $arrLvl2['givenName'] . "<br />"; 
        echo "  L_Name: ".  $arrLvl2['sn'] . "<br />";
        //echo "  Sub: ".  $arrLvl2['sub'] . "<br />";
  }
}


}
} 

这将打印出数组中键的ID、名字和姓氏,但仅向下两级。我该如何使它递归,以便查找嵌套数组中的所有级别?这是我得到的输出:
收件人:pr127r
F_姓名:帕特里克
L_名称:RILEY
收件人:fb2747
F_名称:FRED
L_名称:BAUER
收件人:hp8813
F_姓名:海伦
L_名称:PEPPER
收件人:rg0137
F_姓名:罗伯特
L_名称:格里菲斯
收件人:ss942h
F_名称:STACI
L_Name:SAITO

例如,对于您的数据,您可以尝试以下解决方案:

// example array
$decodedArray = array(
    1 => array(
        'a1' => 'pr127r',
        'givenName' => 'PATRICIA',
        'sn' => 'RILEY',
    ),
    2 => array(
        'a1' => 'hp8813',
        'givenName' => 'HELEN',
        'sn' => 'PEPPER',
    ),
    'sub' => array(
        1 => array(
            'a1' => 'fb2747',
            'givenName' => 'FRED',
            'sn' => 'BAUER',
        ),
        2 => array(
            'a1' => '2fb2747',
            'givenName' => '2FRED',
            'sn' => '2BAUER',
        ),
        'sub' => array(
            1 => array(
                'a1' => 'rg0137',
                'givenName' => 'ROBERT',
                'sn' => 'GRIFFITH',
                'sub' => array(),
            )
        ),
    ),
);
function yourFunction($decodedArray)
{
    echo '<div style="padding-left:20px;">';
    foreach ($decodedArray as $key => $value) {
        if($key != 'sub') {
            // var_dump($value);
            echo "Attuid: ".  $value['a1'] . "<br />"; 
            echo "F_Name: ".  $value['givenName'] . "<br />"; 
            echo "L_Name: ".  $value['sn'] . "<br /><br />"; 
        } else {
            yourFunction($value);
        }
    }
    echo '<div>';
}
yourFunction($decodedArray)