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

如何在PHP Smarty中优化这段代码?

广绪
2023-03-14

如何在PHP Smarty中优化这段代码?

现在我有一个代码让我困惑,有一个简单的代码。

$sql_set_land = "select * from set_new_land where id_rent_house =".Tools::getValue("id_rent_house");
            //print_r($sql_set_land);
            $n_land = Db::rowSQL($sql_set_land,true);
            $landTitle1 = $n_land['landTitle1'];
            $landTitle2 = $n_land['landTitle2'];
            $landBuilderNumber = $n_land['landBuilderNumber'];
            $landLandMark = $n_land['landLandMark'];
            $land_1 = $n_land['land_1'];
            $land_2 = $n_land['land_2'];
            $land_3 = $n_land['land_3'];
...
...
...
            $land_30 = $n_land['land_30'];
            $land_31 = $n_land['land_31'];
            $land_32 = $n_land['land_32'];

当我搜索需要推送值的代码时。

 $this->context->smarty->assign([
                'park_space' =>$park_space,
                'recording_data' =>$recording_data,
                'clode_number' => $clode_number,
                'ad_choose_top' => $ad_choose_top,
                'ad_choose_type' => $ad_choose_type,
                'ad_choose_payment_type' => $ad_choose_payment_type,
                'ad_choose_payment_type1' => $ad_choose_payment_type1,
                'landTitle1' => $landTitle1,
                'landTitle2' => $landTitle2,
                'landBuilderNumber' => $landBuilderNumber,
                'landLandMark' => $landLandMark,
                'land_1' => $land_1,
                'land_2' => $land_2,
                'land_3' => $land_3,
...
...
...
                'land_30' => $land_30,
                'land_31' => $land_31,
                'land_32' => $land_32,

优化如何发挥作用?我能写到数组吗?如果它可以写入数组,我该怎么办?

共有1个答案

葛永丰
2023-03-14

您的问题不在PHP代码中,而是在数据库的设计中。任何时候需要在列名中包含数字都表明您没有对数据进行规范化。

如果您扩展了*(这通常是一种很好的做法,以避免在对数据库进行更改时出现意外),则必须编写以下内容:

select
    landTitle1,
    landTitle2,
    landBuilderNumber,
    landLandMark,
    land_1,
    land_2,
    land_3,
    land_4,
    land_5,
    land_6,
    land_7,
    land_8,
    land_9,
    land_10,
    land_11,
    land_12,
    land_13,
    land_14,
    land_15,
    land_16,
    land_17,
    land_18,
    land_19,
    land_20,
    land_21,
    land_22,
    land_23,
    land_24,
    land_25,
    land_26,
    land_27,
    land_28,
    land_29,
    land_30,
    land_31,
    land_32
from set_new_land 
where id_rent_house = :id

对于一个正常的数据库,您可以编写如下内容:

select
    SND.landTitle1,
    SND.landTitle2,
    SND.landBuilderNumber,
    SND.landLandMark,
    L.landNumber,
    L.land
from set_new_land as SND
join lands as L
   On L.set_new_land_id = SND.set_new_land_id
where SND.id_rent_house = :id

那么在PHP中,可以使用array_column函数

$lands = array_column($dbResults, 'land');
// or, if the land numbers are important
$lands = array_column($dbResults, 'land', 'landNumber');

但是,如果您无法修复数据,可以在PHP中将其转换为更合理的形式,使用一个从1到32的循环:

$lands = [];
for ( $landNumber=1; $landNumber<=32; $landNumber++ ) {
    $columnName = 'land_' . $landNumber;
    $lands[] = $messyDbResults[ $columnName ];
}
 类似资料:
  • 如何将两个方法合并成一个方法 如图parentValues = ['BC', 'BC-SRV', 'BC-SRV-COM'], 想得到的是选中的树组arrSelectedFacets = ['BC-SRV-COM-FTP', 'BC-SRV-COM-TEL'] 如果 BC-SRV-COM 下的子节点都选中,则arrSelectedFacets=['BC-SRV-COM']

  • 我认为代码(如下)已经优化(只需使用比相同逻辑的初始版本更少的变量) > 在优化过程中,我应该考虑哪些因素? 这是代码(也在jsfiddle上) 这是代码的解释。“处理”函数在数组中查找相同的值,对于每个相同的值,它通过将一个数字挂起到该值来更改值,“数字”表示它在数组中找到的值的计数。 例如arr=["x","x","y","z"]将返回["x(1)","x(2)","y","z"]"y"和"z

  • 我已经开始学习JavaScript,我试图制作一个加载条的动画,但我不知道如何使它在条到达终点后重复这个功能,我想也许通过一个循环我可以得到我想要的结果,但我仍然在学习循环,我尝试了不同的方法,改变了整个代码,但没有任何效果。 有人能帮我吗?谢谢你抽出时间。

  • 了解如何在 Dreamweaver 中清除代码、检查浏览器兼容性、验证 XML 文档并使页面符合 XHTML 规范。 清理代码 您可以自动删除空标签,合并嵌套 font 标签,以及通过其它方法改善杂乱或难以辨识的 HTML 或 XHTML 代码。 有关如何清理从 Microsoft Word 文档生成的 HTML 的信息,请参阅打开和编辑现有文档。 在打开的文档中,选择“工具”>“清理 HTML”

  • 问题内容: 我正在使用此代码来检测图像中的绿色。 问题在于此迭代确实很慢。 如何使其更快?如果使用的是numpy,如何以numpy的方式进行? 问题答案: 简单尝试一下:

  • 如何改进这些代码?我试着在API29的应用程序上使用它,但每次我在构建后打开应用程序时,我的应用程序就崩溃了。我在Stackoverflow中找到了这些代码,但由于SharedPefrences等一些功能被弃用而不再工作,我尝试使用新的SharedPeference管理器,但应用程序仍然崩溃。 然后我有,它应该指导用户选择一个布局为XML的选项。 这是使用无线电组的ChoiceActivity的X