我正在从mysql中读取一些行来创建一组单选按钮。我需要两次写出播放器的名称,首先是值属性,第二次是文本。我不明白为什么相同的代码($ players [$ x])在输出html中产生两个不同的值。这是php代码:
$players = readSqlFromMySql("select name from players");
for($x = 0; $x < count($players); $x++) {
echo('<input type="radio" name="radio-choice-v-2" value="' .
$players[$x] . '" id="name-choice-' . chr(66 + $x) . '" ><label
for="name-choice-' . chr(66 + $x) . '">' . $players[$x] . '</label>');
}
这是渲染输出html:
<input type="radio" name="radio-choice-v-2" value="<td style='width:150px;border:1px solid black;'>Amie</td>" id="name-choice-B">
所以第一次,变量的输出是“td style = ...”,这是第二次显示预期值(“Amie”)。这是怎么回事?是php吗? jQuery的? jquerymobile?我正在使用XAMPP。
由于
答案 0 :(得分:2)
$players[$x]
的值是<td style='width:150px;border:1px solid black;'>Amie</td>
,这就是要打印的内容。第二个$players[$x]
位于标签标签内,可能您没有注意到。
您可能尝试在浏览器上打印$player[$x]
,这就是为什么您没有看到td
标记。请检查浏览器输出的来源,看看那里有什么。
同样<td style='width:150px;border:1px solid black;'>Amie</td>
正好是57个字符长;它匹配你的print_r输出。
答案 1 :(得分:0)
警告:由于recent comments,此答案有误。无论如何,这个答案解释了所描述现象可能发生的方式。
如果$players
是对象而不是数组,那么您所描述的内容是可能的。
如果$players
是实现Countable
的类的对象,那么count
($players)
相当于调用方法$players->
Count
此外,如果该类还实现了ArrayAccess
,您可以像数组一样访问它。这是$players[$x]
将等同于$players->
offsetGet
($x)
。并且该方法的实现可以做任何事情,包括在每次调用时返回不同的值。
尝试以下操作,看看它是否实际上是一些自定义类:
echo get_class($players);
同时尝试以下方法:
var_dump($players);
您可以在另一天讨论print_r
vs var_dump
的优点。
在comment中你说:
$ players是一个数组,$玩家[$ x]是一个字符串,两者都是预期的。但是,var_dump返回“string(57)Amie”。 String(57)是我得到的意外代码的长度。
如果您返回代码,则会将$players[$x]
放在属性值中。我们在渲染出来的内容中找到的内容是:<td style='width:150px;border:1px solid black;'>Amie</td>
。这似乎是你从$players[$x]
得到的。
如果我输入我的代码:
<?php var_dump("<td style='width:150px;border:1px solid black;'>Amie</td>");
这是我在浏览器中看到的:
string(57) "Amie"
但如果我look at the source code of the page in the browser,则会显示:
string(57) "<td style='width:150px;border:1px solid black;'>Amie</td>"
那就是那里发生的事情。 Amie的值实际上是"<td style='width:150px;border:1px solid black;'>Amie</td>"
,但您在浏览器中看不到。