2016-08-25 2 views
4

Я следующий кодне в состоянии создать мульти двумерный массив в CodeIgniter

public function get_request($requestid) 
{ 
    $this->db->select('*'); 
    $this->db->from('instanthire as s'); 
    $this->db->join('instanthire_skills as ss', 's.id = ss.requestid'); 
    $this->db->where('s.id',$requestid); 
    $query = $this->db->get(); 
    return $query->result_array(); 
} 

Полученный массив, который я получаю

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [userid] => 1 
      [skills] => html 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [userid] => 1 
      [skills] => core php 
     ) 
) 
Array 
(
    [0] => Array 
     (
      [id] => 3 
      [userid] => 2 
      [skills] => Core Java 
     ) 

    [1] => Array 
     (
      [id] => 4 
      [userid] => 2 
      [skills] => Advance Java 
     ) 
    [2] => Array 
     (
      [id] => 4 
      [userid] => 2 
      [skills] => .net 
     ) 
) 

Проблема в том, что для каждого USERID числа массива увеличивается с увеличением навыков, я хочу создать один массив для каждого пользователя и навыки для этого пользователя должны быть в основном массиве. может кто-нибудь, пожалуйста, как я могу исправить мой массив

Структура таблицы

instanthire

id userid 
1  1 
2  2 

instanthire_skills

id requestid skills 
1 1   html 
2 1   core php 
3 2   core java 
4 2   advance 
5 2   .net 

желаемый результат

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [userid] => 1 
      [skills] => Array 
       (
        [0] => html 
        [1] => core php 
       ) 
     ) 

    [1] => Array 
     (
      [id] => 3 
      [userid] => 2 
      [skills] => Array 
       (
        [0] => core java 
        [1] => advance java 
        [2] => .net 
       ) 
     ) 
) 
+0

Вы можете поделиться своей структурой db? Не возможно с группой? – shafiq

+0

@ user1048123_SOreadytohelp обновил мое сообщение – sammy001

+0

Я сомневаюсь, что вы сможете написать инструкцию SELECT таким образом, чтобы result_array автоматически доставлял нужную структуру массива. Это скорее работа для нескольких строк кода, которые берут данные из базы данных, а затем преобразуют их в желаемую целевую структуру. – CBroe

ответ

1

Eсть ни один запрос, который приходит в голову, будет делать то, что вы хотите. После того, как вы извлечете значения из db, вам придется выполнить некоторую обработку.

Мое предложение состоит в том, чтобы использовать функцию mysql Group_Concat(), чтобы вернуть список, разделенный запятой (строка) навыков. Вы можете explode(), чтобы создать массив навыков.

В этом примере я уронил использование имен таблицы псевдонимов, потому что я запутаться иначе :)

Потому что ваша статья where будет возвращать только одну строку (Существует только одна строка с любой заданной userid значения в instanthire - правильно?) Я использую $query->row_array() для получения данных. Это упрощает возврат к одному массиву в отличие от массива массивов, возвращаемого $query->result_array().

public function get_request($requestid) 
{ 
    $this->db->select('instanthire.id, Group_Concat(instanthire_skills.skills) as skills'); 
    $this->db->from('instanthire'); 
    $this->db->join('instanthire_skills', 'instanthire.id = instanthire_skills.requested_id' , 'inner'); 
    $this->db->where('instanthire.userid', $requestid); 
    $query = $this->db->get(); 
    $result = $query->row_array(); 
    $result['skills'] = explode(",", $result['skills']); 
    return $result; 
} 

Давайте предположим, что вы запускали эти две строки кода

$data = $this->get_request(2); 
var_dump($data); 

и внутри get_request() после $result = $query->row_array(); вы добавили var_dump($result); вы получите этот

array (size=2) 
    'id' => string '2' (length=1) 
    'skills' => string 'core java,advance,.net' (length=22) 

и после get_request() возвращения var_dump($data); отображает это

array (size=2) 
    'id' => string '2' (length=1) 
    'skills' => 
    array (size=3) 
     0 => string 'core java' (length=9) 
     1 => string 'advance' (length=7) 
     2 => string '.net' (length=4) 

Если вы хотите обработать более одного userid, то вам понадобится еще немного кода. Дайте мне знать, если вам нужно это увидеть.

Смежные вопросы