【问题标题】:How to make nested arrays return certain values recursively?如何使嵌套数组递归返回某些值?
【发布时间】:2016-02-19 07:28:22
【问题描述】:

我有一个函数,它保存一个数组,然后是 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_Name: 帕特里夏
L_姓名:莱利
登录号:fb2747
F_Name:弗雷德
L_Name: BAUER
属性:hp8813
F_Name: 海伦
L_Name: PEPPER
属性:rg0137
F_Name:罗伯特
L_姓名:格里菲斯
属性:ss942h
F_Name: STACI
L_Name: 斋藤

【问题讨论】:

    标签: php arrays recursion multidimensional-array foreach


    【解决方案1】:

    以你的数据为例,你可以试试这个解决方案:

    // 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)
    

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 1970-01-01
      • 2020-01-26
      • 2021-01-23
      • 2018-10-29
      • 2021-05-06
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多