while循环中的while循环?从PHP分离数据

时间:2012-09-06 15:55:53

标签: php while-loop

while($row = mysql_fetch_array($result))

//Template for each card in search result
{
echo '<div class="sleeve">';
echo '<div class="card ', $row['name'], '">';
    echo '<div class="front face">';
        echo '<img src="/', $row['cardset'], '/', $row['name'], $row['altart'], '.jpg"', ' alt="', $row['name'], '" />';
    echo '</div>';
    echo '<div class="back face">';
        echo '<a id="name">', $row['name'], '</a><br/>';
        echo '<form name="info" action="">';
        echo '<select name="set">';
            //while???
            echo '<option value="Zendikar">', $row['sets'],'</option>';
        echo '</select>';
        echo 'Foil:<input type="checkbox" name="foil" value="true"/><br/>';
        echo '<select name="condition">';
            echo '<option value="Near Mint">Mint</option>';
            echo '<option value="Played">Played</option>';
            echo '<option value="Damaged">Damaged</option>';
        echo '</select>';
        echo 'Trade:<input type="checkbox" name="trade" value="true"/ <br/>';
        echo '</form>';
        echo '<b>Rulings:</b> <br/>';
        echo $row['rulings'];
    echo '</div>';
echo '</div>';
echo '</div>';
}

// while ??? 在那些混乱的回声中可能很难看到,但有一节我不知道如何处理。 PHP正在抓取信息行,并很好地填充它们。它用一小撮信息填满了屏幕。

在本节中,我不知道如何处理,其中一行中的数据包含每次用(,)分隔的多个东西(thing1,thing2,thing3)。我需要新东西中的每一件事1

所以我觉得每张卡片里面会有另一个while循环?

5 个答案:

答案 0 :(得分:3)

你在循环的正确轨道上。试试这样的东西,它会根据逗号分隔符将字符串分解为数组explode()

echo '<select name="set">';
foreach( explode( ',', $row['sets']) as $item)
    echo '<option>', $item, '</option>';
echo '</select>';

答案 1 :(得分:2)

在将String爆炸成数组之后,您可能需要一个foreach语句: 而不是// while行和下一行:

foreach (explode(',', $row['sets']) as $value)
  echo '<option value="', $value, '">', $value,'</option>';

我猜你实际上每行可能有另一个值(一个要显示,另一个是你要设置的实际值),但是String看起来更像是“(key1 = value1,key2 = value2)“然后你需要更多的工作,但你明白了。 希望这会有所帮助。

答案 2 :(得分:1)

是的,您需要先将explode行放入数组

$list_of_things = explode(",", $row['whatever']);

然后使用whileforeach

$thing_options = '';
foreach($list_of_things as $thing)
    $thing_options .= "<option>$thing</option>";

您可能还会发现 here document 语法很有用:

print <<<TEMPLATE
<div class="sleeve">
    <div class="card {$row['name']}">
    <div class="front face">
        <img src="/{$row['cardset']}/{$row['name']}{$row['altart']}.jpg"
           alt="{$row['name']}" />
    </div>
    <div class="back face">
        <a id="name">{$row['name']}</a>
        <br/>
        <form name="info" action="">
        <select name="set">
            {$thing_options}
            <option value="Zendikar">{$row['sets']}</option>
        </select>
        ...
TEMPLATE;

答案 3 :(得分:1)

虽然告诉您explode()数组的所有答案都是正确的,但我不禁想到让db列填充逗号分隔值是数据库未规范化的症状。您应该查看以下链接,了解db规范化的介绍:http://mikehillyer.com/articles/an-introduction-to-database-normalization/

我还建议回显HTML。理想情况下,您的PHP脚本应遵循以下模式:

预先处理所有PHP,包括数据库查询和表单处理。结果应存储在变量中。

|
|
|
V

几乎纯粹的HTML模板/视图,只有足够的显示逻辑(if / else,循环,echo)来实际显示存储在步骤1中的变量中的结果。

如果你让PHP成为大脑而HTML就是美女,你会发现调试/编辑要简单得多。就像标记和样式应该如何分开一样,脚本和显示也是如此。

答案 4 :(得分:0)

您可以使用PHP的explode-method将逗号分隔的字符串拆分为其值,然后在foreach循环中处理该数组:

$raw = "one,two,three";
$values = explode("," $raw);
foreach($values as $value) {
    echo $value;
}