简体   繁体   中英

for loop append variable php

I have a xml file that i want to echo to the browser

echo $rule = $info->rule1

echo $rule = $info->rule2

Result:

example 1

example 2

Because the rule in the xml is dynamic i want to count how much rules there are and pass that variable behind the "rule"

$xml = simplexml_load_file('file.xml');
$xml_nested = $xml->monthlegenda;
echo "<ul>";
foreach ($xml_nested as $info):
    for($i=1; $i < count($info); $i++){
    $rule = $info->rule;
    $rule .= $i;
    echo $rule;
    };
endforeach;
echo "</ul>";

As a result i expect:

example 1

example 2

but i get 12

You're probably looking for a way to get the property of an object from a string, which is done like so:

$instance->{$var.'string-part'.$otherVar};

In your case, that'd be:

echo $info->{'rule'.$i};

For more details, refer to the man pages on variable variables . Especially the section entitled " #1 Variable property" should be of interest to you...
But since you're echoing <ul> tags before and after the loop, I'm assuming you're trying to create a list, in which case, your echo statement should look like this:

echo '<li>', $info->{'rule'.$i}, '</li>';//comma's not dots!

Note that you'll never loop through the entire $info object, because of your for loop. You should either write:

for ($i=1,$j = count($info);$i<=$j;$i++)
{
    echo $info->{'rule'.$i};
}

Note that I'm assigning count($info) to a variable, to avoid calling count on each iteration of the loop. You're not changing the object, so the count value will be constant anyway... or simply use foreach :

foreach($info as $property => $val)
{//val is probably still an object, so use this:
    echo $info->{$property};
}

In the last case, you could omit the curlies around $property , but that's not recommended, but what you can do here, is check if the property concerned is a rule property:

foreach($info as $property => $val)
{
    if (substr($property, 0, 4) === 'rule')
    {//optionally strtolower(substr($property, 0, 4))
        echo '<li>', $info->{$property}, '<li>';
    }
}

That's the easiest way of doing what you're doing, given the information you've provided...

Try this code for "for":

for($i=1; $i < count($info); $i++)
{
    $rule = $info->{'rule'.$i};
    echo $rule;
}

试试这个:

$rule = $info->{rule.$i};

Check this

$xml = simplexml_load_file('file.xml');
$xml_nested = $xml->monthlegenda;
echo "<ul>";
foreach ($xml_nested as $info) 
    for($i=1; $i < count($info); $i++){
    $rule = "";
    $rule = $info->rule;
    $rules =  $rule.$i;
    echo $rules;
    } 
echo "</ul>";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM