从Oracle发送结果时在PHP中将数组转换为多维数组
下面是我的阵列的外观示例:从Oracle发送结果时在PHP中将数组转换为多维数组,php,arrays,oracle,multidimensional-array,fetch,Php,Arrays,Oracle,Multidimensional Array,Fetch,下面是我的阵列的外观示例: $library = array( 'book' => array( array( 'authorFirst' => 'Mark', 'authorLast' => 'Twain', 'title' => 'The Innocents Abroad' ), array( 'authorFirst
$library = array(
'book' => array(
array(
'authorFirst' => 'Mark',
'authorLast' => 'Twain',
'title' => 'The Innocents Abroad'
),
array(
'authorFirst' => 'Charles',
'authorLast' => 'Dickens',
'title' => 'Oliver Twist'
)
)
);
当我从oracle数据库获得结果时:
$row = oci_fetch_array($refcur, OCI_ASSOC+OCI_RETURN_NULLS);
但是当我执行代码时,我只得到一行。
例如:
但我希望所有行都以xml显示
编辑:
这是我将数组转换为xml的类:
public static function toXml($data, $rootNodeName = 'data', &$xml=null)
{
// turn off compatibility mode as simple xml throws a wobbly if you don't.
if (ini_get('zend.ze1_compatibility_mode') == 1)
{
ini_set ('zend.ze1_compatibility_mode', 0);
}
if (is_null($xml))
{
$xml = simplexml_load_string("<".key($data)."/>");
}
// loop through the data passed in.
foreach($data as $key => $value)
{
// if numeric key, assume array of rootNodeName elements
if (is_numeric($key))
{
$key = $rootNodeName;
}
// delete any char not allowed in XML element names
$key = preg_replace('/[^a-z0-9\-\_\.\:]/i', '', $key);
// if there is another array found recrusively call this function
if (is_array($value))
{
// create a new node unless this is an array of elements
$node = ArrayToXML::isAssoc($value) ? $xml->addChild($key) : $xml;
// recrusive call - pass $key as the new rootNodeName
ArrayToXML::toXml($value, $key, $node);
}
else
{
// add single node.
$value = htmlentities($value);
$xml->addChild($key,$value);
}
}
// pass back as string. or simple xml object if you want!
return $xml->asXML();
}
// determine if a variable is an associative array
public static function isAssoc( $array ) {
return (is_array($array) && 0 !== count(array_diff_key($array, array_keys(array_keys($array)))));
}
}
?>
公共静态函数toXml($data,$rootNodeName='data',&$xml=null)
{
//关闭兼容性模式,因为如果您不这样做,简单xml会引起不稳定。
if(ini_get('zend.ze1_compatibility_mode')==1)
{
ini_集('zend.ze1_兼容性_模式',0);
}
if(is_null($xml))
{
$xml=simplexml\u load\u字符串(“”);
}
//循环遍历传入的数据。
foreach($key=>$value形式的数据)
{
//如果是数字键,则假定为rootNodeName元素数组
如果(是数字($key))
{
$key=$rootNodeName;
}
//删除XML元素名称中不允许的任何字符
$key=preg\u replace('/[^a-z0-9\-\\\\.\:]/i',''$key);
//如果重新找到另一个数组,请调用此函数
if(是_数组($value))
{
//创建新节点,除非这是元素数组
$node=ArrayToXML::isAssoc($value)$xml->addChild($key):$xml;
//重新创建调用-将$key传递为新的rootNodeName
ArrayToXML::toXml($value,$key,$node);
}
其他的
{
//添加单个节点。
$value=htmlentities($value);
$xml->addChild($key,$value);
}
}
//如果需要,可以作为字符串或简单xml对象传回!
返回$xml->asXML();
}
//确定变量是否为关联数组
公共静态函数isAssoc($array){
返回(is_array($array)&&0!==count(array_diff_key($array,array_key($array ')));
}
}
?>
现在我尝试了下面的响应,问题是我得到了以下输出:…
每行后面的标签。。然后我尝试了三维数组,现在我得到:…
在正确的位置,但我有两个。
这是我确定哪个是该数组的根的行,这就是为什么我得到这个输出。但不知道如何更改它:$xml=simplexml\u load\u string(“”)代码>
谢谢。oci\u fetch\u array()
将始终返回一行,您需要调用它,直到没有更多行可提取,才能获取所有行:
while ($row = oci_fetch_array($refcur, OCI_ASSOC+OCI_RETURN_NULLS))
{
$library['book'][] = $row;
}
oci\u fetch\u array()
将始终返回一行,您需要调用它,直到没有更多行可提取,才能获取所有行:
while ($row = oci_fetch_array($refcur, OCI_ASSOC+OCI_RETURN_NULLS))
{
$library['book'][] = $row;
}