0

作为一名实习生,我意识到我花费了大量时间从 PHP 中的 sql 查询构建和操作表。我目前的方法是使用两个 foreach 循环:

foreach($query as $record){
    foreach($record as $field => $value){
        *Things that need to be done on each field-value pair*
    }
    *Things that need to be done on each row*
}

有没有更好的方法来做到这一点?

此外,我倾向于将数据打包为一个 ~ 分隔列表并将其存储在服务器中,这是一种不好的做法吗?

我宁愿放一些代码供审查,但我不想冒险暴露公司鳕鱼的内部。

4

3 回答 3

0

Foreach 循环是遍历数据的最佳方式。如果您想让您的代码更漂亮,请尝试使用三元版本

<?php foreach($query as $record) : ?>
   <?php foreach($record as $field => $value) : ?>
        *Things that need to be done on each field-value pair*
    <?php endforeach; ?>
    *Things that need to be done on each row*
<?php endforeach; ?>

此外,就像上面评论中提到的那样,在数据库中存储 ~ 分隔数据时会丢失很多功能。如果必须这样做,您可以尝试存储序列化对象而不是分隔字符串。您可以通过多种方式操作对象,例如json_encode()json_decode()

   $myArray = array();
    $myArray['User1']['book'] = 'Pride and Prejudice';
    $myArray['User1']['favorites'] = 'Water skiing';
    $myArray['User2']['book'] = 'Mansfield Park';
    $myArray['User2']['favorites'] = array('skateboarding', 'surfing', 'running');
    $myArray['description'] = 'Things people like.';        

    echo '<pre>';
    print_r(json_encode($myArray)); //This will convert your array to a string for the db
    echo '</pre>';

    echo '<pre>';
    $myArrayString = json_encode($myArray);
    print_r(json_decode($myArrayString)); //This will convert the db string to an object for manipulation

echo '</pre>';
于 2012-12-05T16:24:10.643 回答
0

没有内置方法可以根据查询结果生成 HTML 表。如果您发现自己一遍又一遍地编写这种代码,那么创建可重用的类或库将是一个不错的选择。例如:

$table = new HTMLTable();
$table->setData($data);
echo $table->toHTML();

以上不是工作代码,只是一个示例,说明如何创建可重用代码而不是多次重复相同的表格构建代码。

于 2012-12-05T16:27:42.517 回答
0

我倾向于使用while带有其中一个功能的循环mysql_fetch_..。但本质上它和你所做的一样。

$query = 'SELECT
            stuff
          FROM
            table';
if ($query = mysql_query($query)) {
    while ($row = mysql_fetch_assoc($query)) {
        foreach ($row as $key => $value) {
            /* Things that need to be done on each field-value pair */
        }
        /* Things that need to be done on each row */
    }
}

至于 ~ 分隔列表。我强烈建议将数据保存在单独的数据库字段中,而不是那样打包。只需为每个这样的包创建一个新表。

于 2012-12-05T17:51:14.657 回答