如何添加索引来从数据库中foreach数据?

在下面的代码中,我明白foreach $insuranceType_list将把数据行分配给$l$k是多少$kindex ? 任何变量前的@都可以使变量变成全局变量? 这意味着我可以在整个应用程序的任何地方访问它

if(@$insuranceType_list){
  foreach($insuranceType_list as $k=>$l){
    $insuranceType_list[$k]->version_list = $this->mdl_quotation_template->getConditionTemplates('insurance_type_id='.$l->id);
  }
}

我也不知道这里发生了什么:

$insuranceType_list[$k]->version_list 

如果有人能解释我会有所帮助。


解剖:

  • $insuranceType_list是一个对象数组。 我知道这一点,因为你使用箭头访问值,如$l->something ,如果你有一个数组数组,你可以像这样访问它$l['something']
  • 前面的@仅仅意味着你正在压制该变量的错误。 它通常用于你不想抛出错误的函数。
  • 你可以迭代使用foreach而不需要$kforeach($insuranceType_list as $l) ,这意味着你不关心索引,你只需要每次迭代的值。 但是,如果您计划使用该密钥出于任何原因,那么您将使用该$k变量,就像您当前正在做的那样。
  • 例子:假设你有一个数组是这样的:

    $list = [
        [
            'name' => 'john'
            'age' => 29
        ],
        [
            'name' => 'jane'
            'age' => 23
        ]
    ];
    

    如果你想创建说“约翰29岁”的字符串。 然后你会做到以下几点:

    foreach($list as $l){
        echo  "{$l['name']} is {$l['age']} years old";
    }
    

    然而,如果你想让字符串说“约翰是名单上的第一名,并且已经29岁”。 然后你会做到以下几点:

    foreach($list as $k => $l){
        echo  "{$l['name']} is #{$k} on the list, and is {$l['age']} years old";
    }
    

    尽管如此,我会以这种方式缩短代码:

    if (!empty($insuranceType_list)) {
        foreach ($insuranceType_list as $l) {
            $l->version_list = $this->mdl_quotation_template->getConditionTemplates('insurance_type_id=' . $l->id);
        }
    }
    
    链接地址: http://www.djcxy.com/p/58163.html

    上一篇: How to add index to foreach data from database?

    下一篇: Access a specific value from Multidimensional array