Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Oracle发送结果时在PHP中将数组转换为多维数组_Php_Arrays_Oracle_Multidimensional Array_Fetch - Fatal编程技术网

从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;
}