返回数组

时间:2011-10-29 21:20:17

标签: php

我有这些php行:

<?php
$start_text = '<username="';
$end_text = '" userid=';
$source = file_get_contents('http://mysites/users.xml');
$start_pos = strpos($source, $start_text) + strlen($start_text);
$end_pos = strpos($source, $end_text) - $start_pos;
$found_text = substr($source, $start_pos, $end_pos);
echo $found_text;
?>

我想只看到整个文件中的名字,但它只显示了我的名字。我想看到所有的名字。

我认为它类似于:foreach ($found_text as $username) ....但在这里我被卡住了。



从OP帖子更新,如下:

<?php
$xml = simplexml_load_file("users.xml");

  foreach ($xml->children() as $child)
  {
        foreach($child->attributes() as $a => $b)
        {
          echo $a,'="',$b,"\"</br>";

        }


               foreach ($child->children() as $child2)
    {

                foreach($child2->attributes() as $c => $d)
        {
          echo "<font color='red'>".$c,'="',$d,"\"</font></br>";
        }

    }
  }
?>

使用此代码,我会收到有关我的用户的所有详细信息,但从所有这些详细信息中我只想看到2或3

现在我明白了:

name="xxx"
type="default"
can_accept="true"
can_cancel="false"
image="avatars/trophy.png"
title="starter"
........etc

来自同一用户的另一个细节“红色(在脚本上定义)”

reward_value="200"
reward_qty="1"
expiration_date="12/07/2012"
.....etc

我想看到什么?

,即第一栏“name="xxx”的第一行&amp; expiration_date="12/07/2012“来自第二栏

2 个答案:

答案 0 :(得分:1)

您需要使用strpos函数的第3个参数offset重复循环。这样,您每次都可以查找新名称。

像这样(未经测试)

<?php
$start_text = '<username="';
$end_text = '" userid=';
$source = file_get_contents('http://mysites/users.xml');
$offset = 0;
while (false !== ($start_pos = strpos($source, $start_text, $offset)))
{
    $start_pos += strlen($start_text);
    $end_pos = strpos($source, $end_text, $offset);
    $offset = $end_pos;
    $text_length = $end_pos - $start_pos;
    $found_text = substr($source, $start_pos, $text_length);
    echo $found_text;
}
?>

答案 1 :(得分:0)

您应该使用XMLReaderDOMSimpleXML来阅读XML文件。如果您没有看到必要性,请尝试使用以下正则表达式方法来检索所有用户名:

<?php

$xml = '<xml><username="hello" userid="123" /> <something /> <username="foobar" userid="333" /></xml>';
if (preg_match_all('#<username="(?<name>[^"]+)"#', $xml, $matches, PREG_PATTERN_ORDER)) {
  var_dump($matches['name']);
} else {
  echo 'no <username="" found';
}