我该如何创建这个数组? (PHP)

时间:2010-05-24 21:16:21

标签: php arrays

我对如何创建这个数组有点困惑。

我的数据:

category_id | category_name
     1              bikes
     2              cars
     3              books
     4              computers

阵列:

$category=array();
$query = "SELECT * FROM categories ORDER BY name ASC";
$result = $db->query($query);
$category=array('category_id'=>$category_id, 'category_name'=>$category_name);
while ($row = $result->fetch_array()){
    $category_id=$row['category_id'];
    $category_name=$row['name'];
}

我想创建一个数组,以便我可以回显像...

这样的广播列表中的数据
<input type='radio' value='<?PHP echo $category['category_id']; ?>' 
name='category[]'><?PHP echo $category['category_name']; ?>

o bikes
o cars
o books
o computers 

问题是阵列只包含一对(1,自行车),而不是所有数据。 如何制作包含所有数据的数组?

谢谢!

3 个答案:

答案 0 :(得分:3)

你做错了三件事,首先你实际上并没有将$ category设置为等于任何东西 - 只有两个未定义值的值,默认为null。所以你最终得到一个像:

这样的数组
array('category_id' => null, 'name' => null)

其次,当你设置$ category_id和$ category_name时,你什么都不做。接下来,您不是逐项浏览数组,只是输出它设置的初始方式 - 这与您的数组缺少维度的另一个问题相关联。它应该是二维的,而不是一维的。

这段代码总结了一切的要点。我建议阅读数组如何在PHP中工作以及如何定义它们,它们是整个框架中非常常用的数据类型等。

$query = "SELECT * FROM categories ORDER BY name ASC";
$result = $db->query($query);

$categories=array();

while ($row = $result->fetch_array()){
    $categories[] = array('category_id' => $row['category_id'], 'category_name' => $row['name']);
}

然后当你需要输出:

foreach ( $categories as $category ) {
    ?>
    <input type='radio' value='<?php echo $category['category_id']; ?>' name='category[]'><?php echo $category['category_name']; ?>
    <?php
}

这当然可以进一步清理。

答案 1 :(得分:2)

那是因为你只是通过给你第一行记录(如自行车)来回显那里的循环,你应该这样做:

$category=array();
$query = "SELECT * FROM categories ORDER BY name ASC";
$result = $db->query($query);
$category=array('category_id'=>$category_id, 'category_name'=>$category_name);
while ($row = $result->fetch_array()){
    $category_id=$row['category_id'];
    $category_name=$row['name'];
?>
<input type='radio' value='<?PHP echo $category['category_id']; ?>' 
name='category[]'><?PHP echo $category['category_name']; ?>
<?php
}

答案 2 :(得分:1)

您要分配变量$ category_id和$ category_name,而不是分配给数组$ category,因此您只能看到查询返回的第一行。

我通常使用PDO,并写下这样的东西:

<?php
  $db = ...
  $sql = 'SELECT * FROM categories ORDER BY category_name ASC';
  $categories = $db->query($sql);
?>

<html>
<body>
<? foreach ($categories as $category): ?>
<input type="radio" name="category[]" value="<?= $category->category_id ?>">
  <?= $category->category_name ?>
</input>
<? endforeach ?>
</body>
</html>