我试图在 select
HTML 下拉列表中显示类别表的类别名称,但我得到了
Illegal string offset
无论我使用 $value['category_name']
还是 $key['category_name']
,总是出错。
Categories
表只有两行的 category_id
和 category_name
列。
如何访问此数组中的category_id
?
array(6) {
["Field"]=>
string(11) "category_id"
["Type"]=>
string(7) "int(11)"
["Null"]=>
string(2) "NO"
["Key"]=>
string(3) "PRI"
["Default"]=>
NULL
["Extra"]=>
string(14) "auto_increment"
}
我现在的代码:
$q = "SELECT DISTINCT categories.category_name FROM products LEFT JOIN categories ON (products.category_id = categories.category_id)";
$result = mysqli_query($dbc, $q);
$sql = "SHOW COLUMNS FROM `categories`";
$columns = mysqli_query($dbc,$sql);
$arr = [];
while($row = mysqli_fetch_array($columns, MYSQLI_ASSOC)){
$arr[] = $row;
}
<fieldset>
<legend>Add Product</legend>
<p>Product name: <input name="product" type="text" size="60" maxlength="100" required></p>
<p>Category: <select name="category_id"><?php $i = 1;foreach ($arr as $entry)
if($i > 1) {continue;}
{ ?><option value="<?php echo $entry['Field'];?>"><?php foreach($entry as $key=>$value) {var_dump($arr);} ?></option> <?php $i++; }?></select></p>
<p>Price: <input name="price"></p>
<p>Amount: <input name="amount"></p>
<p><input name="submit" type="submit" value="Add This Product"></p>
</fieldset>
最佳答案
PHP 的实际代码部分似乎是以下形式:
$q = "SELECT DISTINCT c.category_name
FROM products p
LEFT
JOIN categories c
ON c.category_id = p.category_id";
$result = mysqli_query($dbc, $q);
// the code below ignores result of the preceding query
$sql = "SHOW COLUMNS FROM `categories`";
$columns = mysqli_query($dbc,$sql);
$arr = [];
while( $row = mysqli_fetch_array($columns, MYSQLI_ASSOC) ) {
$arr[] = $row;
}
$i = 1;
foreach( $arr as $entry ) if( $i > 1 ) { continue; }
// the preceding foreach loop is ended, so the following is not part of that loop
{
echo $entry['Field'];
foreach( $entry as $key=>$value ) {
var_dump($arr);
}
$i++;
}
(没有对 $result
的引用,第一个查询的结果集被丢弃。很难确定这应该完成什么。为什么变量 $i
甚至需要?循环遍历数组的每个元素,并在永远不会满足的条件上执行“继续”是怎么回事?为什么我们需要执行 SHOW COLUMNS 查询?
这只是一个语无伦次的胡言乱语。
我只是猜测,但我们想要完成的工作似乎是检索 category_id
和 category_name
值的列表,并将该列表装饰为
<select ... >
<option value="42">Computers </option>
<option value="43">Smartphpones </option>
</select>
但是,我只是猜测。
看起来我们可以通过查询检索它,并将其存储在数组中:
$sql = "SELECT c.category_id
, c.category_name
FROM products p
LEFT
JOIN categories c
ON c.category_id = p.category_id
GROUP
BY c.category_id
, c.category_name
ORDER
BY c.category_name";
$result = mysqli_query($dbc, $sql);
$arr = [];
while( $row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
$arr[] = $row;
}
一旦我们在初始化中完成了这个工作,当我们创建 html 页面时,当我们到达想要将列表转储到 html 中的位置时,我们将在一个循环中执行此操作,如下所示:
foreach( $arr as $val ) {
echo $val['category_id'];
echo $val['category_name'];
}
关于php - 如何访问这个数组内部元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55249030/