当前位置: 首页 > 知识库问答 >
问题:

更好的显示对象属性的迭代PHP

百里胜泫
2023-03-14

我正在寻找一种更好的方法来迭代一个对象并显示它的内容。
FormController:

   public function run(){

        $tabteachers='';

        if(!empty($_SESSION['apply']) && !empty($_SESSION['application'])){

            $tabteachers = DB::getInstance()->select_teacher_id($_SESSION['login']);
        }
        require_once(VIEW_PATH.'formdeux.php'); 
    }

DB.Class函数():

public function select_teacher_id($login){
        $query = 'SELECT * FROM teachers,internships,students WHERE teachers.email_teacher = internships.email_responsible_internship AND students.registry_number_student = internships.registry_student_internship AND internships.registry_student_internship = '. $this->_db->quote ( $login );
        $result = $this->_db->query ( $query );
        if ($result->rowcount () != 0) {
            while ( $row = $result->fetch () ) {
                $teacher[]= new teacher ( $row->email_teacher,$row->firstname_teacher,$row->lastname_teacher,$row->responsible_internship_teacher,NULL);
            }
            return $teacher;
        }
    }

窗体视图:

    <table>
        <thead>
            <tr>
                <th width="20%" class="decoration">contact</th>
            </tr>
        </thead>
            <tbody>
            <?php foreach ($tabteachers as $teacher) { ?>
                <tr>
                    <td>Lastname: <td>
                    <input type="text" name="lastnamepro" value="<?php echo $teacher->lastname_teacher() ?>" size="100px">
                </tr>
                <tr>
                    <td>Firstname: <td>
                    <input type="text" name="firstnamepro" value="<?php echo $teacher->firstname_teacher() ?>" size="100px">
                </tr>
                <tr>
                    <td>Email address: <td>
                    <input type="text" name="emailpro" value="<?php echo $teacher->email_teacher() ?>" size="100px">
                </tr>
                <tr>
                    <td>Service: <td>
                    <input type="text" name="servicepro" value="null" size="100px">
                </tr>
                <tr>
                    <td>mobile number: <td>
                    <input type="text" name="phonenumberpro" value="aucun numero" size="100px">
                </tr>
            <?php } ?>
            </tbody>
    </table><br>

Db连接:

private static $instance = null;
    private $_db;

    private function __construct() {

        try {
            $this->_db = new PDO ('mysql:host=localhost;dbname=ProjectWeb;charset=utf8', 'root', '' );
            $this->_db->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $this->_db->setAttribute ( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ );

        } catch ( PDOException $e ) {
            die ( 'Erreur de connexion à la base de donnée : ' . $e->getMessage () );
        }
    }

    // Pattern Singleton
    public static function getInstance() {
        if (is_null ( self::$instance )) {
            self::$instance = new Db ();
        }
        return self::$instance;
    }

多谢您提前帮忙!

共有1个答案

轩辕经赋
2023-03-14

我看到您已经将默认的提取模式设置为FETCH_OBJ,但在这个特定的情况下,我认为您可以使用PDO的fetchAll方法将整个结果集作为一个数组获取,然后对其进行迭代,

 public function select_teacher_id($login){
   $query = 'SELECT * FROM teachers,internships,students WHERE
   teachers.email_teacher = internships.email_responsible_internship
  AND students.registry_number_student = internships.registry_student_internship
  AND internships.registry_student_internship = '. $this->_db->quote ( $login );


   $result = $this->_db->query ( $query );
       if ($result->rowcount () != 0) {
         //fetch the entire result set as a multi-dimensional assoc array
         $teachers_result = $result->fetchAll(PDO::FETCH_ASSOC); 
         return $teachers_result;
       }
 }

//查看

<table>
    <thead>
        <tr>
            <th width="20%" class="decoration">contact</th>
        </tr>
    </thead>
        <tbody>
        <?php foreach ($tabteachers as $teacher) { ?>
            <tr>
                <td>Lastname: <td>
                <input type="text" name="lastnamepro" value="<?php echo $teacher['lastname_teacher'] ?>" size="100px">
            </tr>
            <tr>
                <td>Firstname: <td>
                <input type="text" name="firstnamepro" value="<?php echo $teacher['firstname_teacher'] ?>" size="100px">
            </tr>
            <tr>
                <td>Email address: <td>
                <input type="text" name="emailpro" value="<?php echo $teacher['email_teacher'] ?>" size="100px">
            </tr>
            <tr>
                <td>Service: <td>
                <input type="text" name="servicepro" value="null" size="100px">
            </tr>
            <tr>
                <td>mobile number: <td>
                <input type="text" name="phonenumberpro" value="aucun numero" size="100px">
            </tr>
        <?php } ?>
        </tbody>
</table><br>
 类似资料:
  • 如何迭代对象及其子对象的属性?我在中使用了,但无法获取歌曲信息:/

  • 我发现自己经常遇到这种模式。我有一个从api中返回的对象数组,我只需要操作所有对象中的一个属性。 有没有办法使用ES6/Babel或Typescript让该模式更具声明性? 寻找一些巧妙的破坏技巧或类似的东西。

  • 本文向大家介绍如何使用jQuery迭代JavaScript对象的属性?,包括了如何使用jQuery迭代JavaScript对象的属性?的使用技巧和注意事项,需要的朋友参考一下 使用该方法可以迭代JavaScript对象的属性。 上面的照片- 将用于任何集合遍历,无论是一个对象或一个数组。我们来看另一个例子- 示例 输出结果 上面的照片-

  • 问题内容: 有没有一种方法来获取数组的迭代器?像这样: 问题答案: 您可以使用: 它只是将数组包装在列表实现中,以便您可以在其上调用方法。 请注意,这种方法仅适用于对象数组。对于原始数组,您将必须实现自己的迭代器(例如,使用匿名类)。 从Java 8开始,您还可以使用开箱即用的迭代器(并且如果是或,也可以使此代码进行编译: 尽管您将无法使用原始数据类型,并且因为没有相应的流实现。但是,您可以使用以

  • 我想要得到一个这样的对象: 通过这样编码: 但我总是得到以下几点:

  • 我试图使用NetworkX来读取Shapefile,并使用函数来生成包含节点和边的Shapefile,但是当我试图运行代码时,它会给我以下错误: 我使用的是Python 3.4,并通过pip安装安装了NetworkX。 在这个错误之前,它已经给了我另一个说“xrange不存在”或类似的东西,所以我查了一下,只是在nx_shp.py文件中将更改为,这似乎去解决它。 据我所知,它可能与Python版本