如何迭代数组数组

时间:2011-08-18 19:47:22

标签: php mysql arrays oop foreach

我希望有人可以提供帮助。

我确信它只是一个简单的因为某些原因而无法解决的问题。

基本上我有一个处理所有数据库功能的类(连接,选择,插入,更新)。

在select函数中,我返回一个数组。

public function getAll($table, $cols, $where, $limit, $order) {
    // Set the query variables
    if($cols == '') {
        $cols = '*';
    }
    if($where!='') {
        $where = ' WHERE '.$where;
    }
    if($limit!= '') {
        $limit = ' LIMIT '.$limit;
    }
    if($order!='') {
        $order = ' ORDER BY '.$order;
    }

    // Make the query string 
    $sql = 'SELECT '.$cols.' FROM '.$table.$where.$order.$limit;

    //echo $sql;

    // Set the query
    $news_qry = mysql_query($sql);

    // Set the array 
    $rows = array();

    // Run a loop through the results
    while($item = mysql_fetch_object($news_qry)) 
    {
        // Add each row to an array.
        $rows[] = $item;
    }
    return $rows;       
}   

此功能正常,因为我可以打印数组。见下文:

Array ( [Gallery_id] => 1 [Gallery_Name] => Test [Gallery_FolderName] => Test Folder )

但是当我去使用对象时 -

$arr_GalleryInfo = $dataObj->getAll('tbl_Gallery', '', '', '', '');

在每个循环中(见下文)我只从数据库中得到结果的第一个字母。

 <?php
        foreach ($arr_GalleryInfo[0] as $arrGallery) 
        {
    ?>
            <tr>
                <td>
                     <?php echo $arrGallery['Gallery_Name']; ?>          
                </td>

                <td>
                    <?php echo $arrGallery; ?>   
                </td>

                <td>
                    <?php echo $arrGallery; ?>    
                </td>
            </tr>
    <?php
        }
    ?>

任何帮助都会很棒。

感谢。

2 个答案:

答案 0 :(得分:10)

替换:

foreach ($arr_GalleryInfo[0] as $arrGallery) 
{
  etc...

使用:

foreach ($arr_GalleryInfo as $arrGallery)         
{
  etc...

答案 1 :(得分:2)

好吧,你的大问题是你正在尝试迭代数组的0索引。

foreach ($arr_GalleryInfo[0] as $arrGallery) // get rid of the `[0]`.

这将使你真正得到一些合法的迭代,但还有一些其他的东西你将要被击中。

 // this will output `Array`. You want $artGallery['Gallery_FolderName']
 // or $artGallery['Gallery_id']
 echo $arrGallery; 

当然,您可以使用嵌套循环来避免整个第二个问题:

foreach ($arr_GalleryInfo as $arrGallery) {
   echo '<tr>';
   foreach($arrGallery as $val ) echo "<td>$val</td>";
   echo '</tr>';
}

如果$news_qry = mysql_query($sql);失败,如果出现问题,您将无需提醒您。你应该做到:$news_qry = mysql_query($sql) or die(mysql_error());

当然,您应该在所有数据库输入上使用mysql_real_escape_string