2015-11-17 2 views
0

У меня есть функция, которая содержит массив, который затем 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 />"; 

    } 

} 




} 

} 

Это напечатает идентификатор, имя и фамилию для ключей внутри массива, но только два уровня вниз. Как я могу сделать эту рекурсивную систему так, чтобы она просматривала все уровни внутри вложенных массивов? Это то, что я получаю в качестве выхода:
Attuid: pr127r
F_Name: PATRICIA
L_Name: Райли
Attuid: fb2747
F_Name: FRED
L_Name: BAUER
Attuid: hp8813
F_Name: HELEN
L_Name: ПЕРЕЦ
Attuid: rg0137
F_Name: РОБЕРТ
L_Name: GRIFFITH
Attuid: ss942h
F_Name: STACI
L_Name: САЙТО

ответ

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) 
Смежные вопросы