2010-08-02 40 views
0

我试图检索使用SimpleXML从XML文件中的项目N多,把信息变成一个2维数组,如:检索N条记录从XML文件PHP

[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循环吗?或者以某种方式使用计数变量?

+0

可以请你发布一些XML与该代码? – Gordon 2010-08-02 13:48:29

+0

第二代码块从顶部... – rrrfusco 2010-08-02 14:48:36

回答

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

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

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

更新:

使用这个,如果你想限制为6:

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

我需要六个,您的代码返回300个键。 – rrrfusco 2010-08-02 09:29:44

+0

@rrrfusco:然后添加自己的限制? (N代替'Count(...' – Wrikken 2010-08-02 09:32:58

+0

@rrrfusco:请参阅我的更新回答。 – Sarfraz 2010-08-02 09:36:21