我有一个函数,它保存一个数组,然后对其进行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)