【问题标题】:Retrieving data from Multi dimensional Array in Codeigniter从 Codeigniter 中的多维数组中检索数据
【发布时间】:2016-02-05 03:29:47
【问题描述】:

我无法完全从数组中获取数据,当我运行 foreach 循环时,它只会显示列表项的空白列表。

当我打印我的数组时,它会输出以下内容:

Array (
 [Description] => Array (
                [0] => sidewindo 
                [1] => sidewindo 
                [2] => sidewindo 
                [3] => testing ) 
 [comments] => Array   (
               [0] => sidewindo 
               [1] => sidewindo 
               [2] => sidewindo 
               [3] => testing ) 
 [Fld_id] => 625 
 [fld_IsPublic] => Array (
              [0] => 1 ) 
 [action] => s 
 [pk_id] => 7 )

到目前为止我的代码

public function save_data($data)
{
  foreach ($data as $row)
  {
    foreach ($row['Description'] as $show)
      {
         echo $show;
      }  
  }

我还尝试了以下类型的 for 循环来从数组中检索数据。我正在尝试从数组中检索数据并将其更新到数据库的另一个表中。在将其传递给视图之前,我在模型中编写了此代码。

for($i=0;$i<count($comments);$i++)
   { 
     $this->db->update->update('tblname',array('TK_id'=>$data['pk_id'],'Fld_id'=>$data['Fld_id'],'fld_description'=>$data['Description'],'fld_comments'=>$data['comments'],'fld_IsPublic'=>$data['fld_IsPublic']),array('TK_id'=>$data['pk_id'],'Fld_id'=>$data['Fld_id']));
    }
}

【问题讨论】:

  • 你可以在第一个循环中直接使用foreach($data['Description'] as $desc) {}
  • 对了,CI里面有个-&gt;update_batch()的方法,还不如分批创建一组数组,然后用那个方法就好了
  • 对代码块进行 Markdown 清理。
  • @Ghost,如果我这样做,我可以单独获得描述的值..
  • 回声 $show;检查 var_dump

标签: php arrays codeigniter


【解决方案1】:

首先你应该知道echo一个数组会产生一个Notice ( Array to string conversion ),所以根据你工作的环境你会更喜欢使用print_r

回答你的问题,在你echo之前,你应该检查它是否是一个数组

public function save_data($data){
    $update = array(); 
    foreach ($data as $key=>$row){

        if(is_array($row)){
            foreach($row as $key2=>$row2){
                $update[$key2] = $row2;
                //echo $row2 . "<br>"; 
            }

        }else{
           $update[$key] = $row;             
           //echo $row ."<br>";
        }
     }  
  }

现在您可以使用$update 更新您的表格,将其包含在save_data() 函数中,如果需要,将save_data() 包含在foreach 中。请记住,建议在更新数据时使用where

//$this->db->where('id', $id); 
$this->db->update('tblname', $update); 

希望对你有帮助

【讨论】:

  • 是的,我遇到了 echo statemet 的问题(注意:数组到字符串的转换)
  • 我可以使用 php 的 array_key_exists() 在保存时检查数组条目吗?
  • 是的,您可以尝试使用array_key_exists(),但是为什么您在使用foreach 时还要使用它,所以您知道所有的键都会在那里?
【解决方案2】:

更改您的代码

public function save_data($data)
{
  foreach ($data as $row)
  {
    foreach ($row['Description'] as $show)
      {
         echo $show;
      }  
  }

 public function save_data($data)
 {    
    foreach ($data["comments"] as $key=>$row)
    {
        $data_update = array(   
                                'TK_id'             => $data['pk_id'],                                                                 
                                'Fld_id'            => $data['Fld_id'],
                                'fld_description'   => $data['Description'][$key],                      
                                'fld_comments'      => $row,
                                'fld_IsPublic'      => $data['fld_IsPublic'][0]
                            );
        $this->db->update('tblname',$data_update,array('TK_id'=>$data['pk_id'],'Fld_id'=>$data['Fld_id']));
            //but this will update single row again and again
            //my suggetion is use $this->db->insert('tblname',$data_update); instead 
    }
 }

你会没事的

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    相关资源
    最近更新 更多