2016-12-13 161 views
3

这里有两个表格,即工具和tool_use。array_search函数不返回值

工具表看起来像这样

id name    tools_names         quantity type 

    13 cutting player cutting playerA,cutting playerB,cutting playerC  3  engineer 
    12 REFLECTORS  REFLECTORSA,REFLECTORSB        2   team 

tool_use表看起来像这样

id  user_id type  tools     
8  siraj engineer cutting playerA,cutting playerB  
7  siraj team  REFLECTORSB   
6  siraj team  REFLECTORSA  

我想除了显示tools_names插入tool_use表同时插入而是整个tools_names正在显示eventhough结果看起来像在桌子里。我的控制

public function ajax_tools() 
{ 
    $data['tools']=$this->Tools_model->view_available_tools($_POST['type']); 
    foreach ($data['tools'] as $key=>$val) { 
    $data['toolss'][] =explode(',',$val['tools_names']); 

     } 
    $data['tools_names'] = $this->Tools_model->get_tool_names($_POST['type'])->result(); 
    foreach ($data['tools_names'] as $row) 
    { 
     if (($key =array_search($row->tools,$data['toolss'])) !== false) 
     { 
      unset($data['toolss'][$key]); 
      $data['toolss'] = array_values($data['toolss']); 

     } 
    } 
    return $data['toolss']; 
    $this->load->view('ajax_tools',$data); 
} 

这里是我的模型

public function view_available_tools($type) 
{ 
    $this->db->order_by('id','desc'); 
    $this->db->where('status',1); 
    $this->db->where('type',$type); 
    $query=$this->db->get('tools'); 
    return $query->result_array(); 
} 

public function get_tool_names($type) 
{ 
    return $this->db->get_where('tool_use',array('type'=>$type)); 
} 

这是我的看法

<div class="form-group"> 
     <label for="type" class="control-label">Type:</label> 
     <select name="type" id="type" class="form-control" required> 
     <option value="">please select</option> 
     <option value="team" <?php echo set_select('type','team'); ?>>Team</option> 
     <option value="engineer" <?php echo set_select('type','engineer'); ?>>Engineer</option> 
     </select> 
     </div> 

     <div class="form-group "> 
     <label for="tools" class="control-label">Tools:</label> 
     <select name="tools[]" id="tools" multiple="multiple" required> 
     <option value="">please select</option> 

     </select> 
     </div> 

<script> 
$('#type').change(function(){ 
var type=$('#type').val(); 
var url='<?php echo base_url(); ?>tools/tools_control/ajax_tools'; 
     $.post(url, {type:type}, function(data) 
     { 

     $('#tools').html(data); 
     }); 
}); 
</script> 

请帮我解决我的问题

+0

应该不会吧是“return $ data ['tools']”而不是“return $ data ['toolss']”? – deChristo

+0

不要使用额外的字母来指示一些其他变量(工具与工具) - >总是使用自我解释名称(loadedTools与toolNames) - CleanCode –

+0

它会成为一个问题 –

回答

1

当你array_search,你想搜索$row->tools这理应包含cutting playerA,cutting playerB 。并且你在一个数组中搜索不包含相同类型的逗号分隔列表的值,而是包含它们的分解版本(就像你在第3行做过一个explode)。

+0

k.then那么其他两个值REFLECTORSB'和'REFLECTORSA'如何包含它单值,所以它应该显示正确吗? –

+0

实际上否:只考虑类型'team','$ data ['toolss']'会是'[0 ='['REFA','REFB']]''而$ row-> tools'会是''' REFB'在第一次循环迭代(然后在第二次迭代时为'REFA')。所以你的代码会执行'array_search('REFB',[0 => ['REFA','REFB']])',它不能返回任何索引。 –

+0

现在它的回归..看到我的答案,但只有单值插入行不作为数组存储行 –

0

如果toolstool_use包含单值我发现它的解决方案,但如果它包含多个值,我的意思是让我离目的地存储阵列,请看看

public function ajax_tools() 
{ 
    $data['tools']=$this->Tools_model->view_available_tools($_POST['type']); 
    foreach ($data['tools'] as $key=>$val) 
    { 
    $data['toolss'][] = $data['t']=explode(',',$val['tools_names']); 
    } 
    $data['tools_names'] = $this->Tools_model->get_tool_names($_POST['type'])->result(); 
    var_dump($data['tools_names']); 
    foreach ($data['tools_names'] as $val) 
    { 
     if (($key =array_search($val->tools,$data['t'])) !== false) 
     { 
      unset($data['t'][$key]); 
      $data['t'] = array_values($data['t']); 

     } 
    } 

    $this->load->view('ajax_tools',$data); 
} 
+0

请帮我解决这个问题 –

+0

任何人有任何想法 –