Thomas Braeizen
Thomas Braeizen

Reputation: 1

Return in array

I have these php lines:

<?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;
?>

I want to see just the names from entire file, but it shows me just the first name. I want to see all names.

I think it is something like: foreach ($found_text as $username).... but here I am stuck.



Update from OP post, below:

<?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>";
        }

    }
  }
?>

with this code, i receive all details about my users, but from all these details i want to see just 2 or 3

Now i see :

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

Another details from the same user "Red color(defined on script)"

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

what i want to see?

i.e first line from first column "name="xxx" & expiration_date="12/07/2012" from second column

Upvotes: 0

Views: 131

Answers (2)

rodneyrehm
rodneyrehm

Reputation: 13557

You should either use XMLReader or DOM or SimpleXML to read XML files. If you don't see the necessity, try the following regular expressions approach to retrieve all usernames:

<?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';
}

Upvotes: 0

GolezTrol
GolezTrol

Reputation: 116100

You will need to repeat the loop, using the 3rd parameter, offset, of the strpos function. That way, you can look for a new name each time.

Something like this (untested)

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

Upvotes: 1

Related Questions