2016-12-13 166 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

任何人有任何想法 –