2016-12-13 3 views
3

여기에는 tools 및 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 테이블 내가 제외 tools_names를 표시하려면이

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

모양처럼

도구 테이블 보인다 삽입하지만, 전체 tools_names이 바로 그겁니다 결과를 표시하는 동안 테이블을 tool_use 삽입 테이블에있는 것처럼 보입니다. 내 통제가 있습니다.

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); 
} 

여기이 당신 array_search, 당신은 가정 cutting playerA,cutting playerB을 포함 $row->tools를 검색하려는

+0

그것은해야하지 "$ data [ 'tools']"를 반환하지 않고 "$ data [ 'toolss']"를 반환하지 않습니까? – deChristo

+0

다른 변수 (도구 대 도구)를 나타 내기 위해 여분의 문자를 사용하지 마십시오. -> 항상 설명하는 이름을 사용하십시오 (loadedTools 대 toolNames). - CleanCode –

+0

이 문제가됩니다. –

답변

1

내 문제를 해결하기 위해 저를 도와주세요 내보기

<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> 

내 모델

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)); 
} 

입니다 . 그리고 쉼표로 구분 된 같은 값의 목록을 포함하지 않지만 그 대신 폭발 된 버전을 포함하는 배열 내에서 검색합니다 (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

이 봐 주시기 바랍니다 테이블 tool_use에서 tools 단일 값을 포함 할 경우 내가 솔루션을 찾을하지만, 더 값이 포함되어 있다면 멀리 대상에서 저를 유지하는 배열로 저장 의미

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

아무도 아이디어가 없습니다. –

관련 문제