2010-05-24 31 views
3

我有點卡在如何創建此數組。如何創建此數組? (PHP)

我的數據:

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

你正在做的三件事情錯了,首先你實際上並沒有將$ 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 
} 

這當然可以進一步清理。

+0

你先生是男人!謝謝你,我試圖這樣做,但在foreach循環中消失了。 – jpjp 2010-05-24 21:29:20

+0

如果我有密鑰,用array_push可以做到這一點嗎?因爲第一個參數必須是一個數組,但是說我希望它在'category_id'而不是[0],[1]等中 – jpjp 2010-05-24 21:31:42

+0

我不確定你的意思 - 語法$ categories []是相當於array_push()。 – 2010-05-24 21:34:41

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 
} 
+0

如果你'$行= $ result-> fetch_array()'然後'$ row'數組包含你的所有數據用'print_r($ row)'檢查它;' – 2010-05-24 21:26:04

+0

@jpjp:不客氣......... – 2010-05-24 21:27:55

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>