Как перебрать массив массивов - PullRequest
2 голосов
/ 18 августа 2011

Я надеюсь, что кто-то может помочь.

Я уверен, что это просто, что я просто не могу по какой-то причине.

По сути, у меня есть класс, который обрабатывает все функции моей базы данных (подключение, выбор, вставка, обновление).

В функции выбора я возвращаю массив.

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 ]

10 голосов
/ 18 августа 2011

Заменить:

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

на:

foreach ($arr_GalleryInfo as $arrGallery)         
{
  etc...
2 голосов
/ 18 августа 2011

Ну, ваша большая проблема в том, что вы пытаетесь перебрать 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 на всех ваших входах в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...