使用PHP从XML文件中检索n条记录

时间:2010-08-02 09:22:13

标签: php xml

我正在尝试使用simpleXML从XML文件中检索N个项目,并将信息放入二维数组中,如:

[0][name]
[0][image]
[1][name]
[1][image]
[2][name]
[2][image]

在这种情况下,N项将是6。

我想这两种方式,
1.抓住前0-6键和值
2.或者来自xml文件的随机6。

xml文档有300条记录。

XML Example:

<xml version="1.0">
    <info>
        <no>1</no>
        <name>Name</name>
        <picture>http://www.site.com/file.jpg</picture>
        <link>http://www.site.com</link>

    </info>
</xml>

这是我到目前为止所拥有的。读取xml会生成一个二维数组:

function getItems($file_id, $item_count=null)
{
    switch ($file_id)
    {
        case '2':
        $file = "http://xml_file.xml";

        if ($xml = simplexml_load_file($file)) 
        {
            foreach ($xml->info as $info) 
            {
                $var[] = array(
                    "Name"  =>  (string)$info->name,
                    "Image" => (string)$info->picture);     
            }
            return $var;
        }
    }
}

我可以使用for循环吗?或者以某种方式使用计数变量?

2 个答案:

答案 0 :(得分:3)

  

我可以使用for循环吗?或者使用   某种计数变量?

for($i = 0; $i < count($xml->info); $i++)
{
  // your code....
}

<强>更新

如果要限制为6,请使用此选项:

for($i = 0; $i <= 6; $i++)
{
  // your code....
}

答案 1 :(得分:1)

修改
我很难为嵌套节点放置一个for循环和foreach。


回答n个记录的答案

function getItems($file_id, $item_count=null)
{
    switch ($file_id)
    {
        case '2':
        $file = "http://xml_file.xml";

        if ($xml = simplexml_load_file($file)) 
        {
            $i=0;
            foreach ($xml->info as $info) 
            {
                if ($i < $item_count)
                {
                    $var[] = array(
                        "Name"  =>  (string)$info->name,
                        "Image" => (string)$info->picture); 
                }
                $i++;   
            }
            return $var;
        }
    }
}

有人可以建议如何从300条记录中获取n条随机记录吗?


回答随机记录

function getItems($file_id, $item_count=null)
{
    switch ($file_id)
    {
        case '2':
        $file = "http://xml_file.xml";

        if ($file) 
        {
            $xml = simplexml_load_file($file);

            $k = array();
            for ($i=0; $i<$item_count; $i++)
            {
                $k[] = rand(1,300)
            }

            $i=0;
            foreach ($xml->info as $info) 
            {
                if ($i < $item_count)
                {
                    if (in_array($i, $k))
                    {
                        $var[] = array(
                            "Name"  =>  (string)$info->name,
                            "Image" => (string)$info->picture);
                    } 
                }
                $i++;   
            }
            return $var;
        }
    }
}