php - 如何访问这个数组内部元素?

标签 php mysql arrays mysqli foreach

我试图在 select HTML 下拉列表中显示类别表的类别名称,但我得到了

Illegal string offset

无论我使用 $value['category_name'] 还是 $key['category_name'],总是出错。

Categories 表只有两行的 category_idcategory_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_idcategory_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/

相关文章:

php - Mysql查询插入行不插入行

javascript - 从外部程序定位相同的浏览器选项卡

MySql 当 table.column = table.column 时选择 table.column

javascript - 将对象转换为数组并省略键

ios - for 语句循环未按预期工作

php - 将标题 ('Content-Type: image/png' ) 放在任何地方

PHP计算8小时工作日的一半

MySQL 具有 mysqlslap 架构,但 "1049 Unknown database ' mysqlslap'"错误仍然存​​在

MySql Left Join 不保留左表

java - 在Java中比较字符串数组中的元素